保护组合联合类型|打字稿

时间:2015-05-19 12:30:31

标签: typescript

我有一个接受各种对象数组或鼠标点的函数:

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的组合联合类型太多了?

1 个答案:

答案 0 :(得分:1)

instanceof只能用于Javascript类的类(即没有任何泛型)。

如果您在Typescript Playground上使用它,则会看到以下错误:

  

&#39;实例的右侧。表达式必须是&#39; any&#39;或者可以分配给&#39;功能&#39;界面类型。

Example with error

因此,您可以写target instanceof Array,但不能target instanceof Array<number>

在您的情况下,我会通过检查targetcreatejs.Point的实例来解决问题:

if (target instanceof createjs.Point) {
   // ...
} else {
   // target instanceof Array == true
   // ...
}