题目解析
在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的类型。