[英]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.