模拟实现标准库中的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]}

知识点

  1. keyof T: 获取对象T中所有键自面量的联合类型;
  2. 映射类型 [P in keyof T]: 遍历 keyof T 生成T的所有键名的联合类型,将联合类型依次赋值给P生成新对象类型;
  3. 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}.....

posted @ 2026-07-07 19:15  一个行走者  阅读(3)  评论(0)    收藏  举报