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();
}
给定以下代码:
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();
}