TypeScript 不是用 Array() 构造并用 fill 填充的类型检查数组

Roh*_*lor 6 javascript issue-tracking typescript typescript2.4

TypeScript 版本 2.4.2,编译为--target ES6

代码行:

var coins: { coin: number}[] = [1,1,1]
Run Code Online (Sandbox Code Playgroud)

导致 TypeScript 抛出

错误 TS2322:类型“number[]”无法分配给类型“{ coin:number;}[]'

然而,该行:

var coins: { coin: number}[] = Array(3).fill(1)
Run Code Online (Sandbox Code Playgroud)

编译成功,没有错误。

这是 TypeScript 错误,还是预期行为(不是对以这种方式声明的数组进行类型检查)?如果是这样,为什么?

Tit*_*mir 6

问题是Array(3)创建一个长度为 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}
Run Code Online (Sandbox Code Playgroud)

不幸的是,没有办法防止省略数组的类型参数。