错误 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
在幕后使用push
。 push
不起作用是有道理的,因为:如果 labels
是 string[]
而不是 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>' 没有调用签名