我们什么时候应该使用 Record<string, T> 与 { [index: string]: T }?

Max*_*ber 7 typescript

添加它似乎Record肯定是有原因的,但公告手册没有解释原因。

const x: { [index: string]: number } = { f: 2, 3: 5 };
const y: Record<string, number> = { f: 2, 3: 5 };
Run Code Online (Sandbox Code Playgroud)

Tit*_*mir 6

Record通常与键的并集一起使用来获取包含这些键的类型(例如Record<'a' | 'b', string > == { a:string, b:string}:)

如果您传递的不是键的联合,string这将解析为索引签名,因此问题中提到的两种类型是等效的。

您使用哪一个主要是风格问题。如果我定义的类型除了索引签名之外什么都没有,我更喜欢Record. 如果类型更复杂,那么我们需要拼出索引签名。

  • 对于阅读本文的人来说,需要更多上下文,这会导致错误: `const x: { [index: "a" | “b”]:数字 } = {“a”:5 }`。 (2认同)
  • @MaxHeiber 使用 _in_ 而不是冒号: `const x: { [index in "a" | “b”]:数字 } = { a:5,b:3 }`。 (2认同)