Typescript中如何实现Readonly<T>?

48 阅读1分钟

在 TypeScript 中,Readonly<T> 是一个内置的工具类型(Utility Type),用于将类型 T 中的所有属性设置为只读属性。

type Person = {
  name: string;
  age: number;
};

// 创建
type Readonly<T> = {
  readonly [P in keyof T]: T[P];
};
    
type ReadonlyPerson = Readonly<Person>;

// 效果
type ReadonlyPerson = {
  readonly name: string;
  readonly age: number;
};

如上示例:

  • [P in keyof T]: 这部分使用了映射类型语法,它遍历类型 T 的所有属性,并将每个属性的键(key)存储在 P 中。这样,我们可以逐个访问 T 的属性。
  • readonly [P in keyof T]: T[P]: 这部分表示将属性设置为只读。通过 readonly 关键字,我们确保属性值在赋值后不能被修改。

通过将属性类型保持不变,但将其设置为只读,Readonly<T> 工具类型将类型 T 中的所有属性转换为只读属性。

Readonly<T>在TypeScript中,可以帮助确保对象的属性在使用过程中不被意外修改。