【问题标题】:Union type values passed to a method cannot be invoked无法调用传递给方法的联合类型值
【发布时间】:2015-03-20 01:30:35
【问题描述】:

以下代码将产生错误:无法调用类型缺少调用签名的表达式

如果接口相同(例如都包含“a”),一切正常。 为什么?

interface Foo { a:string }
interface Bar { b:string }

var stuff: Foo[] | Bar[];

function doStuff(thing: Foo | Bar) {
    var index = stuff.indexOf(thing);
}

【问题讨论】:

  • 应该是 [(Foos 或 Bars 的数组)] 而不是 [(Foos 的数组)或(Bars 的数组)]? (我不熟悉打字稿,所以也许我误读了类型签名)
  • 确实,你是对的。随意将其发布为答案,我会这样标记它。

标签: typescript typescript1.4


【解决方案1】:

现在stuff 是 Foo 数组和 Bar 数组的联合。您正在尝试针对它检查类型(Foo 或 Bar)的项目。如果 stuff 具有实际类型 Foo[] 而thing 具有实际类型 Bar,则您的类型不匹配。

东西的类型应该是(Foo 或 Bar)的数组。

var stuff: (Foo | Bar)[];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多