模拟实现标准库中的Readonly
将 T 所有属性变为只读
用例
interface User {
id: number;
age: number;
name: string;
}
type ReadonlyUser = MyReadOnly<User>;
//预期: {readonly id: number, readonly age: number, readonly name:string}
实现
type MyReadOnly<T> = {readonly [P in keyof T]:T[P]}
知识点
- keyof T: 获取对象T中所有键自面量的联合类型;
- 映射类型 [P in keyof T]: 遍历 keyof T 生成T的所有键名的联合类型,将联合类型依次赋值给P生成新对象类型;
- readonly: 只读修饰符;
代码执行逻辑
给我一个泛型_T_, 先用keyof T 读取 T的键值组成联合类型("id"|"age"|"name"), 然后用映射类型遍历 [ P in "id"|"age"|"name"],并通过T[P],获取键对应的类型,每遍历一个键名和键值后 在键名前面加上readonly.
{P = id,T[P]=User[id]=number} => {raedonly id:number}.....

浙公网安备 33010602011771号