繁体   English   中英

Typescript class 的属性数组

[英]Typescript properties array of class

我试图从一个新的 object 循环 class 的每个属性,没有任何属性集。 Object.keys() 返回一个空数组。 可能是因为没有设置任何属性。 你知道循环 class 或这个 class 的全新 object 属性的方法吗?

export class Perimeter {
  Id: string;
  Name: string;
  Description: string;
  Typapp: string;
}

 var tmp = new Perimeter();
 console.log('Object keys tmp', Object.keys(tmp)); //Object keys tmp []

我期望的结果是 ['Id', 'Name', 'Description', 'Typapp']

先感谢您

问题是您没有初始化这些属性,因此它们只存在于类型中,而不存在于运行时。 TypeScript 会警告你,说他们从未被明确分配。 例如:

属性“Id”没有初始值设定项,并且在构造函数中未明确分配。 (2564)

例子

您需要初始化属性,使它们存在于您传递给Object.keys的实例上。 您可以通过几种不同的方式来做到这一点。 其中之一是在构造函数参数上使用public修饰符,它既创建公共属性又自动将参数的值分配给该属性:

/*export*/ class Perimeter {
    constructor(
        public Id = "",
        public Name = "",
        public Description = "",
        public Typapp = ""
    ) {
    }
}

const tmp = new Perimeter();
console.log('Object keys tmp', Object.keys(tmp)); //Object keys tmp []

实例

(我在那里包含了默认值,因为您已经显示了对不提供任何 arguments 的构造函数的调用。)

但你也可以明确地写:

/*export*/ class Perimeter {
    Id: string;
    Name: string;
    Description: string;
    Typapp: string;
    constructor(id = "", name = "", description = "", typapp = "") {
        this.Id = id;
        this.Name = name;
        this.Description = description;
        this.Typapp = typapp;
    }
}

const tmp = new Perimeter();
console.log('Object keys tmp', Object.keys(tmp)); //Object keys tmp []

实例

对于 class 这两个属性都具有固定的初始值和在构造函数中分配的属性,我更喜欢声明它们然后在构造函数中分配需要它的那些,但对于所有属性都是构造函数参数的属性,它是一个方便的速记。 无论哪种方式,这都是风格问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM