TypeScript 2.4.2 版,使用 --target ES6
编译
代码行:
var coins: { coin: number}[] = [1,1,1]
导致 TypeScript 抛出
但是,该行:
var coins: { coin: number}[] = Array(3).fill(1)
编译成功,没有错误。
这是一个 TypeScript 错误,还是它的预期行为(不是对以这种方式声明的数组进行类型检查)?。如果是这样,为什么?
最佳答案
问题是 Array(3)
创建了一个长度为 3 的数组,类型为 any[]
,然后 fill
作用于该数组。由于 any
可以分配给任何类型,因此 any[]
也可以分配给任何其他类型的数组(包括 { coin: number}
)
如果要为 Array
指定类型参数,则会出现错误:
var coins: { coin: number}[] = Array<{ coin: number}>(3).fill(1) // 1 is not assignable to { coin: number}
不幸的是,没有办法防止省略数组的类型参数。
关于javascript - TypeScript 不使用 Array() 构造并填充填充的类型检查数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48846795/