这是我看到的代码:
const symbolConverters: {
[K in ts.SymbolFlags]?: string
} = {
[ts.SymbolFlags.RegularEnum]: 'convertEnum',
}
请问一下:
1、[K in ts.SymbolFlags]?
这里的?
是什么意思呢?
2、[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]
这里使用 []
扩住的意思是什么呢?
8 回答4.8k 阅读✓ 已解决
6 回答3.5k 阅读✓ 已解决
6 回答2.4k 阅读
5 回答6.4k 阅读✓ 已解决
3 回答2.5k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
3 回答2.6k 阅读✓ 已解决
1、
[K in ts.SymbolFlags]?
这里的?
是什么意思呢?这里的?是可选属性的意思,也就是说在这个对象里面不是所有的
ts.SymbolFlags
都需要有一个对应的值。如果某个ts.SymbolFlags
枚举成员没有在对象中定义,则该枚举成员在这个对象中就没有对应的属性。2、
[K in ts.SymbolFlags]
这里使用[]
扩住的意思是什么呢?意思是要进行类型的映射。举例来说,现在有一个类型A和另一个类型B:
这两个类型的属性结构是一样的,但是属性的类型不一样。如果属性数量多的话,逐个写起来就很麻烦,那么可以这么写:
类型B采用了属性名索引的写法,
[prop in keyof A]
表示依次得到类型A的所有属性名,然后将每个属性的类型改成 string,那么[K in ts.SymbolFlags]?: string
的意思就是依次得到ts.SymbolFlags枚举成员的属性名,然后每个属性的类型改成 string,由于是可选属性,所以不一定每个枚举成员都会有属性映射。参考来源:阮一峰老师的ts教程