2016-01-13 30 views
5

Chcę przekazać obiekt jako argument dla konstruktora klasy. Niektóre klucze obiektu opcji są opcjonalne.Wartości domyślne dla parametrów opcjonalnych w argumentach opcji

Czy istnieje lepszy/bardziej idiomatyczny sposób wykonywania następujących czynności w maszynopisie? Dzięki

class Car { 
    color: number; 
    numberOfWheels: number; 

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

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

Odpowiedz

4

Zamiast tego użyj if (options.numberOfWheels === void 0) { options.numberOfWheels = 4; }. (W przeciwnym razie 0 lub NaN ... będzie również 4)

Poza tym to, co robisz, jest w rzeczywistości całkiem sprytne i najlepsze, co możesz zrobić. Takie rzeczy nie będzie działać:

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

Można użyć destructuring na to:

class Car { 
    color: number; 
    numberOfWheels: number; 

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

Alternatywnie ...

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

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

Używam maszynopis najnowszej wersji i stajni od czerwca 2017 r. z VSCode.

Możemy osiągnąć opcjonalny parametr i wartość domyślną, korzystając z poniższego opisu.

export class Searcher { 
    createLog(message: string = "Default: No Message!") { 
    console.log(message); 
    } 
} 

Dobry odnośnik do informacji o Optional and Default valued parameters in TypeScript.

Mam nadzieję, że to pomoże!

Powiązane problemy