映射类型
通过 in 关键字做类型的映射,遍历已有接口的 key 或者是遍历联合类型
type Readonly<T> = {
readonly [P in keyof T]: T[P];
}
interface Obj {
a: string
b: string
}
type ReadOnlyObj = Readonly
上述的结构,可以分成这些步骤:
keyof T:通过类型索引 keyof 的得到联合类型 ‘a’ | ‘b’
P in keyof T 等同于 p in ‘a’ | ‘b’,相当于执行了一次 forEach 的逻辑,遍历 ‘a’ | ‘b’
所以最终ReadOnlyObj的接口为下述:
interface ReadOnlyObj {
readonly a: string;
readonly b: string;
}