推荐答案
Readonly<T> 是 TypeScript 中的一个内置工具类型,用于将类型 T 中的所有属性设置为只读(readonly)。这意味着一旦对象被创建,其属性就不能被修改。
示例代码
// www.javascriptcn.com code example
interface Person {
name: string;
age: number;
}
const person: Readonly<Person> = {
name: "Alice",
age: 30,
};
// 以下代码会报错,因为属性是只读的
person.name = "Bob"; // Error: Cannot assign to 'name' because it is a read-only property.本题详细解读
作用
Readonly<T> 的主要作用是确保对象的属性在创建后不能被修改。这在需要确保数据不可变的场景中非常有用,例如在函数式编程中,或者在处理配置对象时。
实现原理
Readonly<T> 的实现原理是通过映射类型(Mapped Types)来实现的。TypeScript 提供了内置的映射类型,可以将一个类型的所有属性映射为只读属性。
源码实现
type Readonly<T> = {
readonly [P in keyof T]: T[P];
};keyof T:获取类型T的所有属性名。P in keyof T:遍历类型T的所有属性名。readonly [P in keyof T]: T[P]:将每个属性P设置为只读,并保留其原始类型T[P]。
通过这种方式,Readonly<T> 将类型 T 中的所有属性都标记为只读,从而确保对象在创建后不能被修改。