instanceof 检查接口

instanceof check on interface

给定以下代码:

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
    }
  }
}

我收到错误 "Can't find name IMyInterfaceA"。处理这种情况的正确方法是什么?

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

TypeScript 对接口使用鸭子类型,因此您应该只检查对象是否包含某些特定成员:

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