实现Readonly

108 阅读1分钟

题目解析

TypeScript中,Readonly是一个内置的泛型类型,用于将对象的所有属性设置为只读。

示例分析

假设我们有一个接口 Car,它定义了一辆车的基本属性,包括品牌、年份和型号。我们将使用Readonly将这个接口的所有属性设置为只读,从而确保这些属性在对象创建后不能被修改。这对于需要保护对象数据不被意外更改的场景非常有用。

interface Car {
    brand: string;
    year: number;
    model: string;
}

const myCar: Readonly<Car> = {
    brand: "Toyota",
    year: 2024,
    model: "Corolla"
}

// 下面这段代码会报错,因为是只读属性,不可以再做修改。Cannot assign to 'brand' because it is a read-only property.
myCar.brand = 'BMW'

题解

interface Car {
    brand: string;
    year: number;
    model: string;
}

type MyReadonly<T> = {
    readonly [P in keyof T]: T[P]
}

const yourCar: MyReadonly<Car> = {
    brand: 'Toyota',
    year: 2024,
    model: "Corolla"
}

// 下面这段代码会报错,因为是只读属性,不可以再做修改。Cannot assign to 'brand' because it is a read-only property.
yourCar.brand = "BMW"
  • T代表原类型。
  • readonly 表示只读属性。
  • [P in keyof T] 表示遍历类型 T 的所有属性 P
  • T[P]则获取T中每个属性P的类型。