传递给方法的联合类型值无法调用

mya*_*sev 0 typescript typescript1.4

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

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

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

var stuff: Foo[] | Bar[];

function doStuff(thing: Foo | Bar) {
    var index = stuff.indexOf(thing);
}
Run Code Online (Sandbox Code Playgroud)

axb*_*unt 5

现在stuff是Foo数组和Bar数组的联合.您正试图检查类型(Foo或Bar)的项目.如果stuff实际类型为Foo []且thing实际类型为Bar,则表示类型不匹配.

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

var stuff: (Foo | Bar)[];
Run Code Online (Sandbox Code Playgroud)