这是我的代码
interface clients{
[key: string]: number
}
let x:clients = {}
我不明白为什么可以为x分配一个空对象?
答案 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'
}