错误 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:无法调用其类型缺少调用签名的表达式的主要内容,如果未能解决你的问题,请参考以下文章

AngularX TS错误无法调用类型缺少调用签名的表达式[关闭]

使用 require 时出现打字稿错误 - 此表达式不可调用。类型“typeof import(...)”没有调用签名.ts(2349)

TS/SFC/RenderProp:无法调用类型缺少调用签名的表达式

登录表单上的 Vue-Apollo V4 组合 API @vue/apollo-composable。 TS2349:此表达式不可调用。类型 'Ref<any>' 没有调用签名

类型数组的打字稿错误:- 无法调用其类型缺少调用签名的表达式

无法调用其类型缺少调用签名的表达式...没有兼容的调用签名