2017-06-22 123 views
1

在創建對象時傳遞JSON初始化構造函數的參數假設我有一類如何在打字稿

export class PersonName { 
    constructor(
     public firstName: string = "", 
     public lastName: string = "", 
     public middleName: string = "", 
    ) { } 
} 

我想通過傳遞JSON對象在創建對象的時候初始化這些變量在構造函數中聲明。

例如:

var person = new Person({ 
     "firstName" : "abc", 
     "lastName" : "xyz", 
     "middleName" : "" 
     }); 
+0

你例子不是有效的JSON(它甚至不是有效的語法),你的意思是':'而不是'='? –

+0

是的,這只是一個複製粘貼錯誤。你有什麼解決方案嗎? –

回答

0

一種方式做到這一點是爲構造提供重載,然後測試第一參數是否是一個字符串或包含的字段的對象:

export class Person { 
    public firstName; 
    constructor(
     firstName: string, 
     lastName: string, 
     middleName: string, 
); 
    constructor(
     person: { firstName: string, lastName: string, middleName: string } 
); 
    constructor(
     arg1: string | { firstName: string, lastName: string, middleName: string } = "", 
     public lastName: string = "", 
     public middleName: string = "", 
    ) { 
     if (typeof arg1 === "string") { 
     this.firstName = arg1; 
     } else { 
     this.firstName = arg1.firstName; 
     this.lastName = arg1.lastName; 
     this.middleName = arg1.middleName; 
     } 
    } 
} 

const person = new Person({ 
     "firstName": "", 
     "lastName": "", 
     "middleName": "", 
}); 
const person2 = new Person("foo", "bar", "baz");