Typescript: 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". Как правильно справиться с этой ситуацией?
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
}
}
}
TypeScript использует duck typing для интерфейсов, поэтому вы должны просто проверить, содержит ли объект некоторые конкретные члены:
if ((<IMyInterfaceA>my).someCoolMethodFromA) {
(<IMyInterfaceA>my).someCoolMethodFromA();
}