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

When should we use Record<string, T> vs { [index: string]: T } ? [TypeScript

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

看来 Record 肯定是有原因的,但是 announcement and Handbook 没有解释为什么。

const x: { [index: string]: number } = { f: 2, 3: 5 };
const y: Record<string, number> = { f: 2, 3: 5 };

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

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

您使用哪一个主要是风格问题。如果我定义的类型只有索引签名,我更喜欢Record。如果类型比较复杂,那么我们需要拼出索引签名。