2016-01-13 10 views
5

Ich möchte ein Objekt als Argument für den Konstruktor einer Klasse übergeben. Einige Schlüssel des Optionsobjekts sind optional.Default-Werte für optionale Parameter in Optionen Argument

Gibt es eine bessere/mehr idiomatische Art, das folgende in Typoskript zu erreichen? Danke

class Car { 
    color: number; 
    numberOfWheels: number; 

    constructor (options: {color: number, numberOfWheels?: number}) { 
     options.numberOfWheels |= 4; 

     this.color = options.color; 
     this.numberOfWheels = options.numberOfWheels; 
    } 
} 

Antwort

4

Verwenden Sie stattdessen if (options.numberOfWheels === void 0) { options.numberOfWheels = 4; }. (Ansonsten 0 oder NaN ... wird auch 4 sein)

Abgesehen davon, was Sie tun, ist eigentlich ziemlich clever und es ist das Beste, was Sie tun können. Dinge wie das wird nicht funktionieren:

class Car { 
    color: number; 
    numberOfWheels: number; 

    constructor ({color, numberOfWheels = 4}: {color: number, numberOfWheels?: number}) { 
     this.color = color; 
     this.numberOfWheels = numberOfWheels; 
    } 
} 

Alternativ ...

constructor (options: {color: number, numberOfWheels?: number}) { 
    let {color, numberOfWheels = 4} = options; 

    this.color = color; 
    this.numberOfWheels = numberOfWheels; 
} 
0

Ich verwende Typoskript neueste und stabled Version:

constructor (options: {color: number, numberOfWheels?: number} = {color: options.color})