请解释 TypeScript 中的 Record<K, T> 的作用和实现原理

推荐答案

Record<K, T> 是 TypeScript 中的一个实用工具类型,用于创建一个对象类型,其属性键为 K 类型,属性值为 T 类型。它通常用于定义具有特定键值对结构的对象类型。

语法

示例

在这个示例中,RolePermissions 是一个对象类型,其键为 UserRoles 类型(即 'admin' | 'editor' | 'viewer'),值为 string[] 类型。

本题详细解读

实现原理

Record<K, T> 的实现原理是通过映射类型(Mapped Types)来实现的。它遍历 K 类型的所有可能值,并为每个值创建一个属性,属性的类型为 T

  • K 是一个联合类型,表示对象的所有可能键。
  • T 是对象属性的值类型。

使用场景

Record<K, T> 通常用于以下场景:

  1. 定义具有特定键值对结构的对象类型:例如,定义一个对象类型,其键为特定的字符串或数字,值为某种类型。
  2. 简化类型定义:当需要定义一个对象类型,且其键和值的类型较为复杂时,使用 Record<K, T> 可以简化类型定义。

注意事项

  • K 必须是 keyof any 的子类型,即 string | number | symbol
  • Record<K, T> 生成的类型是一个对象类型,因此不能用于定义数组或元组类型。

示例解析

在示例中,UserRoles 是一个联合类型,表示用户的角色。RolePermissions 是一个对象类型,其键为 UserRoles 类型,值为 string[] 类型。通过 Record<UserRoles, string[]>,我们定义了一个对象类型,其键为 'admin' | 'editor' | 'viewer',值为 string[] 类型。

纠错
反馈