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
.