为什么我可以分配一个空的对象类型{[key:string]:number}

时间:2019-10-26 00:20:48

标签: typescript

这是我的代码

interface clients{
    [key: string]: number
}
let x:clients = {}

我不明白为什么可以为x分配一个空对象?

2 个答案:

答案 0 :(得分:4)

为什么不起作用?

使用[key: string]: number基本上是说所有属性键必须是字符串,值必须是数字。因为对于JS对象始终来说,所有属性键都是字符串,所以它只是说,该对象的所有属性值都必须是数字。它不对对象必须具有多少个属性做出任何声明。可以为零(如您的示例所示)或任意多个。

答案 1 :(得分:1)

如另一个答案中所述,{ [key: string]: number }表示该类型的任何索引都会产生数字。 {}更接近Partial<{ [key: string]: number }>{ [key: string]: number | undefined })。

您也可以考虑使用Record<string, number>

无论如何,

{ [key: string]: number | undefined }是一种更安全的类型,尤其是在启用strict模式的情况下。当索引类型为该值的值时,结果变量的类型为number | undefined。它迫使您在JavaScript中验证结果。

const client = x['clientId'] // type = number | undefined

if (client != undefined) {
  // typeof client === 'number'
}