2016-05-29 4 views
0

Ich habe einen Konstruktor, der als Parameter ein Objekt verwendet, das Eigenschaften des Objekts enthält.Interface erstellen Alle optionalen Felder aus der Klasse

class MyObj { 
    a = 0; 
    b = 0; 
    c = 0; 
    d = 0; 
    constructor(params){ 
     for(var i in params) 
      this[i] = params[i]; 
    } 
} 

Mein Ziel ist die automatische Vervollständigung haben, wenn so etwas wie new MyObj({a:1}) zu schreiben. Gerade jetzt, ich brauche eine getrennte Schnittstelle zu schaffen, die automatische Vervollständigung

interface MyObjOptions { 
    a?:number; 
    b?:number; 
    c?:number; 
    d?:number; 
} 

mit constructor(params:MyObjOptions){...}

zu haben Gibt es eine Möglichkeit, das zu tun, ohne dass alle Felder in einer Schnittstelle zu duplizieren?

Antwort

1

Gibt es eine Möglichkeit, dies zu tun, ohne alle Felder in einer Schnittstelle duplizieren zu müssen?

Sie können das Objekt in eine config Eigenschaft setzen:

interface MyObjOptions { 
    a?:number; 
    b?:number; 
    c?:number; 
    d?:number; 
} 

class MyObj { 
    constructor(public options:MyObjOptions) { 
    } 
} 

Aber wenn Sie defaults wollen Sie haben sie in der Schnittstelle zur Liste + sie schreiben, so müssen Sie schreiben zum Beispiel a zweimal. Kein Weg um es herum

Verwandte Themen