ошибка TS2349: невозможно вызвать выражение, тип которого не имеет сигнатуры вызова

Я использую Angular 2 с TypeScript 2.

Когда я использую

let labels: string[] | number[] = [];
// let labels: Array<number> | Array<string> = [];

labels.push(1);

это дает мне ошибку:

ошибка TS2349: невозможно вызвать выражение, тип которого не имеет сигнатуры вызова.


person Hongbo Miao    schedule 30.08.2016    source источник


Ответы (1)


Изменение

let labels: string[] | number[] = [];

к любому из этих

let labels: (string | number)[] = [];
let labels: Array<number|string> = [];

решит вопрос.

person Hongbo Miao    schedule 30.08.2016
comment
Я понимаю, что это старый, но решил, что все равно спрошу здесь ... Я не думаю, что string[] | number[] эквивалентно (string | number)[]. Я думаю, что первый вариант означает, что labels будет либо массивом all строк, либо массивом all чисел. Второй вариант означает, что labels - это массив, содержимое которого может быть строками или числами, взаимозаменяемо. Есть мысли по этому поводу? - person austinbruch; 11.02.2019
comment
@austinbruch Да, ты прав. Дополнительная информация: github.com/Microsoft/TypeScript/issues/10620. В этой ссылке та же проблема возникает с его кодом, использующим filter, потому что я полагаю, что filter использует push под прикрытием. Логично, что push не работает, потому что: если labels равно string[], а не number[], то этот код явно не будет работать: labels.push(1). - person Nick; 14.03.2019