假设我有一个如下课程:
class Company {
name: string;
url: string;
address: string
constructor() {
}
}
然后我从数据库中检索一个对象,该对象包含类的某些或全部属性,例如
{name: "Acme", url: "www.acme.com"}
有没有一种方法可以自动从对象构造类?
此刻,我知道我可以做类似的事情:
const company = new Company();
const object = {name: "Acme", url: "www.acme.com"}; // in reality retrieve from database
for (const key in object) {
if (key == "name") {
company.name = object[key];
}
if (key == "url") {
company.url = object[key];
}
}
但这不是很优雅,并且在大量对象属性上变得笨拙。
有自动的方法吗?
答案 0 :(得分:1)
根据您的方法进行调整:
const company = new Company();
const someObject = { name: "Acme", url: "www.acme.com" };
let legitKeys: Array<keyof Company> = [
'name','address','url'
];
for (const key in someObject) {
if (legitKeys.indexOf(key as keyof Company) !== -1) {
company[key] = someObject[key];
}
}
“公司的密钥”类型用作安全网,因此您不能偶然将不是公司密钥的字符串添加到legitKeys数组中。
我觉得还有更好的方法,例如一种写if语句的更优雅的方式。
要使用noImplicitAny摆脱编译器错误,您可以使用此方法(仍然感觉可以做得更好):
class Company implements IndexSignature {
[key: string]: any;
...
}
interface IndexSignature {
[key: string]: any;
}
const someObject = {
name: "Acme", url: "www.acme.com"
} as IndexSignature;