我想获取一个简单的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"没被抓住。如何获取未初始化的属性的属性名称?
答案 0 :(得分:1)
你需要记住,TypeScript主要是基于JavaScript的语法糖。在编译TypeScript代码时,对JavaScript没有立即影响的所有内容都不会延续。
在这种情况下,您有成员声明。其主要特征是定义对象可能具有的成员。 JavaScript本身允许您在任何对象上设置任意成员,因此在TypeScript类型上使用成员声明会限制您有权访问哪些成员。
对于您的特定情况,您在班级中声明了两位有效成员:myProperty
和otherProperty
。此外,您还使用值初始化otherProperty
。
考虑一下此时在JavaScript领域发生的事情:成员声明不存在,所以剩下的就是初始化成员otherProperty
。特别是,这是您的类声明在JavaScript中编译的内容:
export class Simple {
constructor() {
this.otherProperty = "some text";
}
}
正如您所看到的,没有myProperty
因为没有分配给它。所以对于JavaScript方面来说,它还不存在。
这意味着在运行时(JavaScript是TypeScript的运行时),存在类型为Simple
的对象的唯一属性是otherProperty
,这就是为什么这是你获得的唯一属性在检查你的物体时。