Jak fungují výchozí parametry TypeScript

V předchozím článku jsem se zabýval konceptem volitelných parametrů v TypeScriptu. V této příručce jsme použili ? symbol otazníku k označení, zda byl argument funkce nepovinný.

V této příručce se podíváme na jiný způsob, jak toho dosáhnout – s výchozími parametry.

Výchozí parametry

Než se podíváme na to, jak tyto parametry fungují v TypeScriptu, shrňme si, jak fungují v Javascriptu. Výchozí parametry jsou již v Javascriptu široce podporovány. Když mluvíme o výchozích parametrech , mluvíme o zadání hodnot argumentů, které by se měly použít, pokud tento argument není definován. Například:

let myFunction = (x, y = "World") => {
    console.log(x + " " + y);
}

myFunction("Hello");

Ve výše uvedeném příkladu od y je nedefinováno, když voláme myFunction , použije se výchozí hodnota. Tím se vyhnete problému y může být undefined pokud to uživatel ve funkci nezmíní. Pokud bychom nedefinovali y zde by funkce výše konzole logovala Hello undefined .

Proč používat výchozí parametry?

Výše uvedený příklad je dobrým důvodem, proč byste mohli chtít použít výchozí parametry. Zde nechceme, aby uživatel viděl undefined hodnota. Nahradíme tedy y s výchozím nastavením, což znamená, že toto nikdy neukazujeme uživateli. Představte si podobný scénář, kdy zobrazujeme jméno uživatele. V tomto příkladu nemusíme mít vždy příjmení. Zde bychom mohli použít výchozí hodnoty, abychom jej vynechali a nezobrazovali text undefined uživateli:

let showName = (firstName, lastName = "") => {
    return firstName + " " + lastName
}

Výchozí parametry jako takové nám v některých případech umožňují zlepšit uživatelský dojem. Lze je také použít na jiných místech, jako je například nastavení výchozí polohy tvaru na plátně HTML.

Výchozí parametry v TypeScript

Naštěstí v TypeScriptu není mnoho přidané složitosti, pokud jde o výchozí parametry. Stejným způsobem je můžeme přidat do našeho kódu - jen také definujeme typy.

let myFunction = (x: string, y: string = "World") => {
    console.log(x + " " + y);
}

myFunction("Hello");

Zde očekáváme, že oba argumenty budou řetězce, ale ve skutečnosti ani nemusíme dávat y typ. Engine TypeScriptu bude odvodit, že y je řetězec, protože jeho výchozí hodnota je řetězec:

let myFunction = (x: string, y = "World") => {
    console.log(x + " " + y);
}

myFunction("Hello");

To znamená, že běží myFunction("Hello", 1) bude stále mít za následek chybu TypeScript – dokonce pokud explicitně nedefinujeme y typ uživatele:

Argument of type 'number' is not assignable to parameter of type 'string'.

Závěr

Závěrem lze říci, že výchozí parametry lze použít stejným způsobem jako v Javascriptu. Jediná další věc, kterou je třeba vzít v úvahu, je, že nemusíme vždy definovat typ u parametru, který má výchozí hodnotu, a pokud ne, TypeScript převezme typ na základě výchozí hodnoty. Pokud tedy výchozí hodnota byla 1 , pak by TypeScript předpokládal, že tento argument byl number .