2015-07-31 4 views
4

Учитывая следующий код:Машинопись: InstanceOf проверить интерфейс

module MyModule { 
    export interface IMyInterface {} 
    export interface IMyInterfaceA extends IMyInterface {} 
    export interface IMyInterfaceB extends IMyInterface {} 

    function(my: IMyInterface): void { 
    if (my instanceof IMyInterfaceA) { 
     // do something cool 
    } 
    } 
} 

Я получаю сообщение об ошибке «Не удается найти имя IMyInterfaceA». Каков правильный способ справиться с этой ситуацией?

+0

Возможный дубликат [проверки типа интерфейса с машинопись] (https://stackoverflow.com/вопросы/14425568/интерфейс типа проверки-с машинописи) –

ответ

2

Невозможно выполнить проверку интерфейса интерфейса, поскольку информация о типе не переводится каким-либо образом в скомпилированный код JavaScript.

Вы можете проверить конкретную собственность или способ и решить, что делать.

module MyModule { 
    export interface IMyInterface { 
     name: string; 
     age: number; 
    } 
    export interface IMyInterfaceA extends IMyInterface { 
     isWindowsUser: boolean; 
    } 
    export interface IMyInterfaceB extends IMyInterface { 

    } 

    export function doSomething(myValue: IMyInterface){ 
    // check for property 
    if (myValue.hasOwnProperty('isWindowsUser')) { 
     // do something cool 
    } 
    } 
} 
3

машинопись использует утиную типизацию для интерфейсов, так что вы должны просто проверить, если объект содержит некоторые специфические элементы:

if ((<IMyInterfaceA>my).someCoolMethodFromA) { 
    (<IMyInterfaceA>my).someCoolMethodFromA(); 
} 
Смежные вопросы