Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 获取对象的属性名_Typescript - Fatal编程技术网

Typescript 获取对象的属性名

Typescript 获取对象的属性名,typescript,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)} --> "ot

我想得到一个简单的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"]

我不明白为什么“我的财产”没有被抓到。如何获取未初始化属性的属性名?

您需要记住,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
,这就是为什么您在检查对象时只能得到该属性。

我理解,非常感谢您的明确解释。但是,Typescript上是否有一种“语法”方法可以让您获得对象的属性?像Simple.getProperties()这样的“静态”的东西没有,因为这些信息都没有编译成JavaScript。您可以编写一个预构建步骤,分析TypeScript代码,然后将类型信息作为一些元数据单独公开。但我不知道你会怎么开始。在一个有点相关的主题上,看一看哪一个也可以通过向JavaScript(在页面底部)公开装饰器元数据的方式进行编译。谢谢!我在寻找这类东西,但我在寻找“属性”(C#!)而不是“装饰者”