实现 将对象的所有属性 变为只读

80 阅读1分钟

先看下 readonly 的作用

class Person {
//标记为只读属性,不可以更改
  readonly name: string;
  readonly age: number;
  constructor(name: string, age: number) {
    this.name = name;
    this.age = age;
  }
}


const p = new Person("小王", 34); 

//无法为“name”赋值,因为它是只读属
p.name = "小李";

自己实现一个 myReadonly,以实现将一个对象的所有属性变为只读

//接收一个泛型参数
type myReadonly<T> = {
//in  用于遍历 对象类型 或 联合类型 的属性
//keyof  获取对象的所有属性,并以联合类型的方式返回
  readonly [P in keyof T]: T[P];
};

interface Per {
  name: string;
  age: number;
  gender: string;
}

//将 Per 类型,作为泛型参数传递
const per: myReadonly<Per> = {
  name: "111",
  age: 34,
  gender: "male",
};

无法为“age”赋值,因为它是只读属性。
per.age = 23;