获取对象的属性名称

时间:2017-08-07 21:35:15

标签: typescript

我想获取一个简单的Typescript对象的属性名称。

export class Simple {
    myProperty: string;
    otherProperty: string = "some text";
}

var s = new Simple();
Object.getOwnPropertyNames(s) --> ["otherProperty"]
for(var property in s) {console.log(property)} --> "otherProperty"
Object.keys(s) --> ["otherProperty"]

我不明白为什么" myProperty"没被抓住。如何获取未初始化的属性的属性名称?

1 个答案:

答案 0 :(得分:1)

你需要记住,TypeScript主要是基于JavaScript的语法糖。在编译TypeScript代码时,对JavaScript没有立即影响的所有内容都不会延续。

在这种情况下,您有成员声明。其主要特征是定义对象可能具有的成员。 JavaScript本身允许您在任何对象上设置任意成员,因此在TypeScript类型上使用成员声明会限制您有权访问哪些成员。

对于您的特定情况,您在班级中声明了两位有效成员:myPropertyotherProperty。此外,您还使用值初始化otherProperty

考虑一下此时在JavaScript领域发生的事情:成员声明不存在,所以剩下的就是初始化成员otherProperty。特别是,这是您的类声明在JavaScript中编译的内容:

export class Simple {
    constructor() {
        this.otherProperty = "some text";
    }
}

正如您所看到的,没有myProperty因为没有分配给它。所以对于JavaScript方面来说,它还不存在。

这意味着在运行时(JavaScript是TypeScript的运行时),存在类型为Simple的对象的唯一属性是otherProperty,这就是为什么这是你获得的唯一属性在检查你的物体时。

相关问题