Вот соответствующий баг. А
вот объяснение почему это не баг.
В общем случае пустой массив имеет тип
never[]
. Но в простом случае TypeScript умеет выводить тип изначально пустого массива по последующим операциям над ним. Типа push.
Так что реально тип test1 из вашего примера станет
string[]
, как только будет "зафиксирован". Например, возвращён из функции или назначен в другую переменную.
Так что следующий код будет работать:
function buildArray() {
const test1 = []; // тут будет any[]
test1.push('str');
test1.push(1);
}
const array = buildArray(); // тип (string | number)[]
А вот такой - уже нет
const test1 = []; // тут будет any[]
test1.push('');
const test2 = test1;
test2.push(2); // Argument of type '2' is not assignable to parameter of type 'string'.