TS高级-Record和Readonly
Record
定义一个键值对类型的对象(即可以同时对键和值进行类型约束)。
type Person = {
name: string;
age: number;
};
type K = "A" | "B" | "C";
type P = Record<K, Person>;
let person: P = {
A: { name: "张三", age: 18 },
B: { name: "李四", age: 20 },
C: { name: "王五", age: 22 },
};
原理
type Person<K extends keyof any, T> = {
[P in K]: T;
};
keyof any会返回:type key = string | number | symbol;
Readonly
用于定义一个只读类型的对象(即对象的属性值不能被修改)。
type MyObj = {
readonly a: string;
readonly b: number;
};
const obj: MyObj = {
a: "hello",
b: 123,
};
obj.a = "world"; // Error: Cannot assign to 'a' because it is a read-only property.