TypeScript 不对用 Array() 构造并用 fill 填充的数组进行类型检查
TypeScript not type checking array constructed with Array() and populated with fill
TypeScript 版本 2.4.2,使用 --target ES6
编译
代码行:
var coins: { coin: number}[] = [1,1,1]
导致 TypeScript 抛出
error TS2322: Type 'number[]' is not assignable to type '{ coin: number; }[]'
但是,行:
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}
不幸的是,没有办法防止遗漏数组的类型参数。
TypeScript 版本 2.4.2,使用 --target ES6
代码行:
var coins: { coin: number}[] = [1,1,1]
导致 TypeScript 抛出
error TS2322: Type 'number[]' is not assignable to type '{ coin: number; }[]'
但是,行:
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}
不幸的是,没有办法防止遗漏数组的类型参数。