检查对象(或只是一个类)是否具有属性

zer*_*oin 7 typescript

让我们说我有一节课:

module MyModule {
    export class MyClass {
       x:number;
       y:number;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我有一个字符串,"x".如何检查MyClass是否具有属性"x"?

如果我创建一个MyClass实例然后执行:

myClassInstance.hasOwnProperty("x");
Run Code Online (Sandbox Code Playgroud)

它返回false,除非x设置了默认值.但我不想为每个属性设置默认值.如果我甚至可以在不创建MyClass实例的情况下做到这一点,那将是最好的.

Nin*_*rry 5

TypeScript在执行前编译为JavaScript.在最终的JavaScript代码中,TypeScript的类型信息不再可用.因此,无法在运行时检查TypeScript类型信息.


如果要在编译时进行检查,可以使用接口,如以下示例所示:

interface IHasX
{
    x:any;
}

class MyClassA {
    x:number;
    y:number;
}

class MyClassB {
    y:number;
}

function Test(param: IHasX)
{
    // Do something with param.x 
}

var objA = new MyClassA();
var objB = new MyClassB();

Test(objA);
Test(objB);
Run Code Online (Sandbox Code Playgroud)

最后一行Test(objB);将无法编译,因为TypeScript编译器知道它objB是类型的MyClassB,并且该类没有x按接口要求命名的属性IHasX.