打字稿:在界面上检查instanceof

时间:2015-07-31 14:11:49

标签: typescript

给出以下代码:

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”。处理这种情况的正确方法是什么?

2 个答案:

答案 0 :(得分:6)

TypeScript对接口使用duck typing,因此您只需检查对象是否包含某些特定成员:

if ((<IMyInterfaceA>my).someCoolMethodFromA) {
    (<IMyInterfaceA>my).someCoolMethodFromA();
}

答案 1 :(得分:5)

没有办法运行时检查接口,因为类型信息没有以任何方式转换为已编译的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
    }
  }
}