我有一个接受各种对象数组或鼠标点的函数:
function zoomTo(target : Array<Cube|Circle> | createjs.Point)
但是当我试图保护这种类型时,无论采用何种方式,我都会收到错误:
if (target instanceof Array<Cube|Circle>)
if (typeof target === Array<Cube|Circle>)
错误:(142,46)TS1005:&#39;(&#39;预期。
我是做错了还是TypeScript的组合联合类型太多了?
答案 0 :(得分:1)
instanceof
只能用于Javascript类的类(即没有任何泛型)。
如果您在Typescript Playground上使用它,则会看到以下错误:
&#39;实例的右侧。表达式必须是&#39; any&#39;或者可以分配给&#39;功能&#39;界面类型。
因此,您可以写target instanceof Array
,但不能target instanceof Array<number>
。
在您的情况下,我会通过检查target
是createjs.Point
的实例来解决问题:
if (target instanceof createjs.Point) {
// ...
} else {
// target instanceof Array == true
// ...
}