TS 工具类型:Record

发布时间 2023-04-11 12:09:56作者: Himmelbleu

类型定义

Record 的类型定义是下面这样:

type Record<K extends string | number | symbol, T> = { [P in K]: T; }

Record 的作用:构造一个对象类型,其属性键为 K,其属性值为 T。

解释类型

其一

K extends string | number | symbol Record 需要传递一个类型 K,K 是 string、number、symbol 三个类型中的一个。

构造的对象类型属性值是类型 T,T 的类型可以是基础类型、对象、数组、函数等,实际上没有约束类型 T 到底长什么样,只要是合法的类型都可以。

其二

{ [P in K]: T; } Record 返回的结果,这个对象的键就是前面类型 K 推导出来的结果。假如传递的是 string,那么类型 K 就是 string,因此类型 P 就是 string。

举个例子:

keys 类型是一个联合类型,有 string、number。KeyName 约束对象的键类型属于类型 keys,即对象的键可以是 string、number 类型,其值是 string 类型。因此,obj 对象构造 "hello"888 是可以通过的。

实际使用

约束一个对象,对象键类型是 number,值也是一个对象:

image