错误 TS2349:无法调用其类型缺少调用签名的表达式

Posted

技术标签:

【中文标题】错误 TS2349:无法调用其类型缺少调用签名的表达式【英文标题】:error TS2349: Cannot invoke an expression whose type lacks a call signature 【发布时间】:2017-01-06 08:21:15 【问题描述】:

我正在使用 Angular 2 和 TypeScript 2。

当我使用时

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

labels.push(1);

它给了我错误:

错误 TS2349:无法调用其类型缺少调用的表达式 签名。

【问题讨论】:

【参考方案1】:

变化

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

到这些中的任何一个

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

会解决问题。

【讨论】:

我意识到这是旧的,但我想我还是会在这里问...我不认为string[] | number[] 等同于(string | number)[]。我认为第一个选项意味着labels 将是一个 all 字符串数组或 all 数字数组。而第二个选项意味着labels 是一个数组,其内容可以是字符串或数字,可以互换。对此有什么想法吗? @austinbruch 是的,你是对的。这里有更多信息:github.com/Microsoft/TypeScript/issues/10620。在该链接中,使用filter 的代码也发生了同样的问题,因为我想filter 在幕后使用pushpush 不起作用是有道理的,因为:如果 labelsstring[] 而不是 number[],那么这段代码显然不起作用:labels.push(1)

以上是关于错误 TS2349:无法调用其类型缺少调用签名的表达式的主要内容,如果未能解决你的问题,请参考以下文章