Record<keyof T, T[keyof T]> 解释

Record<keyof T, T[keyof T]> 是 TypeScript 中的一个高级类型构造,它用于构建一个新的对象类型,其中的键是类型 T 的所有键的联合类型,值则是这些键对应的值类型。

让我们逐步解析这个表达式:

  1. keyof T:

    • keyof 是一个类型运算符,它接受一个类型 T 并返回该类型的键(属性名)的联合类型。
    • 例如,如果你有一个类型 T 如下:
       
      type T = {
          name: string;
          age: number;
      };
      那么 keyof T 就是 "name" | "age"
  2. T[keyof T]:

    • T[keyof T] 表示从类型 T 中选择一个键(由 keyof T 定义),然后获取该键对应的值类型。
    • 例如,在上面的例子中,T[keyof T] 可以是 string 或 number,因为 T 的键 "name" 对应的值类型是 string,而 "age" 对应的是 number
  3. Record<keyof T, T[keyof T]>:

    • Record<K, V> 是一个实用工具类型,它接受两个类型参数:键类型 K 和值类型 V
    • 它创建一个新的对象类型,其中键是 K 类型,值是 V 类型。
    • 在我们的例子中,Record<keyof T, T[keyof T]> 创建一个新的对象类型,其键是 T 的所有键的联合类型,值是这些键对应的值类型。

示例代码:

type User = {
    name: string;
    age: number;
    class: string;
};

type UserKeys = keyof User; // "name" | "age" | "class"
type UserValues = User[keyof User]; // string | number | string

type UserRecord = Record<keyof User, User[keyof User]>;

const user: UserRecord = {
    name: "Alice",
    age: 25,
    class: "A1"
};

在这个例子中,UserRecord 类型等价于 User 类型,因为它包含了相同的键和值类型。但是,Record<keyof User, User[keyof User]> 的主要用途在于它可以动态地根据 T 的键和值来构建类型,而不是硬编码键和值类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值