簡體   English   中英

在TypeScript中,如何自動為類分配對象屬性?

[英]In TypeScript, how can I automatically assign object properties to my class?

假設我有一個如下課程:

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];
        }

    }

但這不是很優雅,並且在大量對象屬性上變得笨拙。

有自動的方法嗎?

根據您的方法進行調整:

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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM