TypeScript version 2.4.2, compiled with --target ES6
The line of code:
var coins: { coin: number}[] = [1,1,1]
causes TypeScript to throw
error TS2322: Type 'number[]' is not assignable to type '{ coin: number; }[]'
However, the line:
var coins: { coin: number}[] = Array(3).fill(1)
compiles successfully, without errors.
Is this a TypeScript bug, or is it intended behavior (not type checking an array declared in this manner)?. If so, why?
The problem is that Array(3)
creates an array of length 3 and type any[]
and then fill
acts on that array. Since any
can be assigned to any type, any[]
can also be assigned to any other typed array (including { coin: number}
)
If you were to specify the type parameter for Array
you would get an error:
var coins: { coin: number}[] = Array<{ coin: number}>(3).fill(1) // 1 is not assignable to { coin: number}
There is no way to prevent the omission of the type argument for the array unfortunately.