映射类型
映射类型的主要作用是基于键名映射到键值类型。
type Stringify<T> = {
[K in keyof T]: string;
};
这个工具类型会接受一个对象类型(假设我们只会这么用),使用 keyof 获得这个对象类型的键名组成字面量联合类型,然后通过映射类型(即这里的 in 关键字)将这个联合类型的每一个成员映射出来,并将其键值类型设置为 string。
interface Foo {
prop1: string;
prop2: number;
prop3: boolean;
prop4: () => void;
}
type StringifiedFoo = Stringify<Foo>;
上述代码等价于
interface StringifiedFoo {
prop1: string;
prop2: string;
prop3: string;
prop4: string;
}
当然,既然我们可以拿到键,也就可以拿到对应的键值类型。
type Clone<T> = {
[K in keyof T]: T[K];
};
这个类型其实就包括了前面的一些类型知识。其中 K in
属于映射类型的语法,keyof T
属于 keyof
操作符,[K in keyof T]
的 []
属于索引签名类型,T[K]
属于索引类型访问。