TS进阶用法Record & Readonly

Readonly

type Readonly<T> = {
    readonly [P in keyof T]: T[P];
};
  • keyof 是干什么的?

keyof我们讲过很多遍了 将一个接口对象的全部属性取出来变成联合类型

  • in 是干什么的?

in 我们可以理解成for in P 就是key 遍历 keyof T 就是联合类型的每一项

  • Readonly 是将该属性变为只读

Readonly 这个操作就是将每一个属性变成只读

  • T[P] 是干什么的?

T[P] 索引访问操作符,与 JavaScript 种访问属性值的操作类似

Record

type Record<K extends keyof any, T> = {
    [P in K]: T;
};
  • keyof any 返回 string number symbol 的联合类型

  • in 我们可以理解成for in P 就是key 遍历 keyof any 就是string number symbol类型的每一项

  • extends来约束我们的类型

  • T 直接返回类型

做到了约束 对象的key 同时约束了 value

贡献者: mankueng