2015-05-19 4 views
1

У меня есть функция, которая принимает либо массив различных объектов или точки мыши:Охрана для составленного типа объединения | Машинопись

function zoomTo(target : Array<Cube|Circle> | createjs.Point) 

Но когда я пытаюсь защитить для типа, независимо от того, каким образом, я получаю сообщение об ошибке:

if (target instanceof Array<Cube|Circle>) 

if (typeof target === Array<Cube|Circle>) 

Error:(142, 46) TS1005: '(' expected.

Я делаю что-то неправильно или это сложный тип объединения слишком много для TypeScript?

ответ

1

instanceof использовать только классы, которые являются классами Javascript (т. Е. Без каких-либо дженериков).

Если вы используете его на Typescript Playground, вы увидите следующее сообщение об ошибке:

The right-hand side of an 'instanceof' expression must be of type 'any' or of a type assignable to the 'Function' interface type.

Example with error.

Следовательно, вы можете написать target instanceof Array, но не target instanceof Array<number>.


В вашем случае, я бы решить эту проблему путем проверки target является экземпляром createjs.Point вместо:

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

, к сожалению, это не удается в моем редакторе WebStorm. –

+0

пренебречь мой комментарий пожалуйста. У WebStorm есть собственный компилятор TypeScript, и он не проверяет выражение, даже если он работает на игровой площадке MS. –

Смежные вопросы