今天学习 TypeScript 的一种新的转换类型操作:索引映射类型——IIMT(Immediately Indexed Mapped Type)
。
这个类型特别有意思,我们先看一个示例:
type Tuple = [1, true, 'false']
type List = Tuple[number]
- 上面代码先创建了一个元组 Tuple。
- 然后通过 number 进行索引访问
得到的 List 为:
type List = 1 | true | 'false'
可以发现上面操作 通过索引映射,将操作类型转为了联合类型。
如果是对象类型呢?
type Person = {
name: string
age: number
}
type GetValueType = {
[K in keyof Person]: Person[K]
}[keyof Person]
通过上面的转换,我们得到一个新的类型:
type GetValueType = string | number
如果说我们想根据 Person 类型创建一个新的类型,其结构为:
/**
* | {
* key: string;
* } | {
* key: number;
* }
*
*/
修改 GetValueType:
type GetValueType = {
[K in keyof Person]: {
key: Person[K]
}
}[