2017-06-22 3 views
1

nehme ich an, indem json Objekt zum Zeitpunkt der Objekterstellungwie Konstruktorargumente zu initialisieren, indem JSON zum Zeitpunkt der Objekterstellung in Typoskript vorbei

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

Ich möchte initialisieren diese Variablen in Konstruktor deklariert eine Klasse haben.

zum Beispiel:

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

Ihre Beispiel ist nicht gültig JSON (es ist nicht einmal gültige Syntax), meintest du ':' anstelle von '='? –

+0

Ja, es war nur ein Kopierfehler. Haben Sie diesbezüglich eine Lösung? –

Antwort

0

Eine Möglichkeit, es zu tun ist, Überlastungen für den Konstruktor zur Verfügung zu stellen und dann prüfen, ob das erste Argument ein String oder ein Objekt war die Felder enthält:

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"); 
Verwandte Themen