2017-06-22 125 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");