`[K in ts.SymbolFlags]?` 这里的`?` 是什么意思呢?

这是我看到的代码:

const symbolConverters: {
  [K in ts.SymbolFlags]?: string 
} = {
  [ts.SymbolFlags.RegularEnum]: 'convertEnum',
}

请问一下:
1、[K in ts.SymbolFlags]? 这里的? 是什么意思呢?
2、[K in ts.SymbolFlags] 这里使用 [] 扩住的意思是什么呢?

阅读 680
1 个回答

1、[K in ts.SymbolFlags]? 这里的? 是什么意思呢?
这里的?是可选属性的意思,也就是说在这个对象里面不是所有的ts.SymbolFlags都需要有一个对应的值。如果某个ts.SymbolFlags枚举成员没有在对象中定义,则该枚举成员在这个对象中就没有对应的属性。
2、[K in ts.SymbolFlags] 这里使用 [] 扩住的意思是什么呢?
意思是要进行类型的映射。举例来说,现在有一个类型A和另一个类型B:

type A = {
  foo: number;
  bar: number;
};

type B = {
  foo: string;
  bar: string;
};

这两个类型的属性结构是一样的,但是属性的类型不一样。如果属性数量多的话,逐个写起来就很麻烦,那么可以这么写:

type A = {
  foo: number;
  bar: number;
};

type B = {
  [prop in keyof A]: string;
};

类型B采用了属性名索引的写法,[prop in keyof A]表示依次得到类型A的所有属性名,然后将每个属性的类型改成 string,那么[K in ts.SymbolFlags]?: string的意思就是依次得到ts.SymbolFlags枚举成员的属性名,然后每个属性的类型改成 string,由于是可选属性,所以不一定每个枚举成员都会有属性映射。
参考来源:阮一峰老师的ts教程

推荐问题
logo
Microsoft
子站问答
访问
宣传栏