先看下 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;