【发布时间】:2019-01-26 21:58:10
【问题描述】:
Record<K, T> 在 Typescript 中是什么意思?
Typescript 2.1 引入了Record 类型,并举例说明:
// For every properties K of type T, transform it to U function mapObject<K extends string, T, U>(obj: Record<K, T>, f: (x: T) => U): Record<K, U>
Advanced Types 页面在 Readonly、Partial 和 Pick 旁边的映射类型标题下提到了 Record,似乎是它的定义:
type Record<K extends string, T> = { [P in K]: T; }
Readonly、Partial 和 Pick 是同态的,而 Record 不是。 Record 不是同态的一个线索是它不需要输入类型来复制属性:
type ThreeStringProps = Record<'prop1' | 'prop2' | 'prop3', string>
就是这样。除了以上引用,typescriptlang.org 上没有其他提及Record。
问题
-
有人可以简单定义
Record是什么吗? -
Record<K,T>仅仅是一种说法“这个对象上的所有属性都将具有T类型”吗?可能不是所有属性,因为K有一些目的...... -
K泛型是否禁止对象上不是K的附加键,还是允许它们并仅指示它们的属性未转换为T? -
用给定的例子:
type ThreeStringProps = Record<'prop1' | 'prop2' | 'prop3', string>和这个一模一样吗?:
type ThreeStringProps = {prop1: string, prop2: string, prop3: string}
【问题讨论】:
-
4. 的答案几乎是“是”,所以这应该可以回答您的其他问题。