如何在 TypeScript 中定义属性名未知的对象类型

在某些场景下,我们会使用 {} 来存储某类对象的映射关系,例如车主和车子的映射关系可记为:

1
2
3
4
{
'Alice': new Car(),
'Bob': new Car()
}

而在 TypeScript 中声明这种对象的类型时遇到了问题:该对象的属性名是未知的,不过所有属性名对应的值的类型是确定的。这种情况下可以借助 Indexable Types 解决,以上述的例子为例:

1
2
3
4
5
6
7
8
interface CarOwners {
[key: string]: Car;
}

const carOwners: CarOwners = {
'Alice': new Car(),
'Bob': new Car()
}

参考: