【发布时间】:2017-08-23 22:29:50
【问题描述】:
在创建一个以对象为参数的实例后,我想实现两件事:
首先,遍历参数的属性并将其添加到实例中,如果它与构造函数上方声明的此属性方式完全相同。有没有一种快速的方法,我必须一个一个地检查这个吗?
其次,我想检查是否定义了每个声明的属性,如果没有,则设置默认值。
var data = {
langs: ["de","en","fr"],
lesson: {
de: "Einführung",
en: "Introduction"
},
keywords: []
}
class Video {
langs: Array<string>;
lesson: object;
topic: object;
intro: object;
keywords: Array<Keyword>;
constructor (data) {
for (let prop in data) {
if (/*data.s is of type as declared above constructor()*/) {
this[prop] = data[prop];
} else {
throw "Type of {{prop}} is invalid";
}
}
for (let prop in /*All the props defined above constructor()*/) {
if (!this.hasOwnProperty(prop)) {
//Set default value;
}
}
}
}
var video = new Video(data);
【问题讨论】:
-
不,没有办法做到你所要求的。原因是属性名称及其类型在编译过程后都丢失了。您需要将该信息保存为代码的一部分,无论是您自己还是使用装饰器(元数据)
-
您可以这样做,但需要进行一些额外的检查。数组,例如 Object 类型的 ar。
标签: javascript angular typescript