So definieren Sie optionale Konstruktorargumente mit Standardwerten in Typescript

Lesezeit: 1 Minute

Ist es möglich, optionale Konstruktorargumente mit Standardwerten wie diesem zu haben?

export class Test {
    constructor(private foo?: string="foo", private bar?: string="bar") {}
}

Dies gibt mir den folgenden Fehler:

Parameter dürfen kein Fragezeichen und keinen Initialisierer haben.

Ich möchte Instanzen wie erstellen

x = new Test();               // x.foo === 'foo'            
x = new Test('foo1');         // x.foo === 'foo1'
x = new Test('foo1', 'bar1');

Was ist der richtige Typoskript-Weg, um dies zu erreichen?

Ein Argument, das einen Standardwert hat, ist per Definition optional, as in den Dokumenten angegeben:

Standardmäßig initialisierte Parameter, die nach allen erforderlichen Parametern kommen, werden als optional behandelt und können genau wie optionale Parameter beim Aufruf ihrer jeweiligen Funktion weggelassen werden

Für Konstruktoren gilt dasselbe wie für andere Funktionen, also in Ihrem Fall:

export class Test {
    constructor(private foo: string = "foo", private bar: string = "bar") {}
}

  • private foo = "foo", private bar = "bar" Ich denke, der Typ kann hier abgeleitet werden.

    – André Elrico

    14. Juni 2019 um 11:32 Uhr

  • In meiner persönlichen Vorliebe tippe ich gerne immer define, auch wenn es offensichtlich ist

    – Derek Lawrence

    9. Oktober 2019 um 16:53 Uhr

  • Wie machen Sie das mit destrukturierten Parametern so knapp wie möglich, ohne die Liste der destrukturierten Felder zu duplizieren?

    – Dan Dascalescu

    4. März 2020 um 2:42 Uhr

Sie können Fragezeichen nach Ihren Argumenten hinzufügen, was sauberer ist. Wenn Sie Standardparameter hinzufügen, sollten diese standardmäßig optional sein.

export class Test {
   foo: string; 
   bar: string;

    constructor(foo?: string, bar?: string) {
    this.foo = foo;
    this.bar = bar;
   }
}

1438410cookie-checkSo definieren Sie optionale Konstruktorargumente mit Standardwerten in Typescript

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy