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/

10-09 14:29