给出以下代码:
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 :(得分: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
}
}
}