feng xiaohan

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.