以下代码将产生错误:无法调用类型缺少调用签名的表达式。
如果接口相同(例如都包含'a'),一切正常。 为什么呢?
interface Foo { a:string }
interface Bar { b:string }
var stuff: Foo[] | Bar[];
function doStuff(thing: Foo | Bar) {
var index = stuff.indexOf(thing);
}
答案 0 :(得分:5)
现在stuff
是Foo数组和Bar数组的并集。您正在尝试检查类型(Foo或Bar)的项目。如果stuff
的实际类型为Foo []且thing
的实际类型为Bar,则表示类型不匹配。
东西的类型应该是(Foo或Bar)的数组。
var stuff: (Foo | Bar)[];