Zpátky na blog

Typescript: Required

22. 4. 2022 | Václav Kandus, Cleverlance

V úvodním článku našeho seriálu o TypeScriptu Efektivní TypeScript​​​​ jsme se zaměřili na generický transformační typ Partial.
Jeho opakem je Required​, ale stejně jako Partial je aplikován pouze na položky na nejvyšší úrovni.

Pojďme si dát tentokrát za cíl vytvoření nového typu z aktuálního tak, že nově vytvořený typ má veškeré položky povinné.

Mějme typový alias User, jehož definice je následující:

výsledkem následujícího přiřazení

je typový alias se všemi položkami povinnými.

Pro demonstraci toho, že Required označí jako povinné pouze položky na nejvyšší úrovni, si zadefinujme adresu jako

a uživatele včetně adresy následovně:

Výsledkem přiřazení​


pak je

Jinými slovy, adresa sama o sobě je povinná, jednotlivé její položky však nikoli.

Pro úplnost se ještě pojďme podívat na implementaci a trochu si ji v krátkosti rozebrat:

Implemetace výše mapuje každou položku původního typu dle daného předpisu. V našem případě je odstraněn z každého klíče původního typu Elvis operátor “?“ a z volitelné položky je učiněna položka povinná.

V porovnání s Partial, probíraném v předešlém článku, a jehož implementace vykonává pravý opak, každý klíč původního typu označuje jako volitelný.

Je dobré si pamatovat, že pokud použijeme typ Required v projektu, kde TypeScriptový překladač má nastavenu hodnotu strictNullChecks: true, pak aplikace typu Required neodstraní pouze nepovinnost dané položky, ale též undefined. Pojďme si to ukázat na příkladu, definujme uživatele následovně:

a proveďme následující přiřazení:​

pak výsledný alias vypadá takto:

jinými slovy, při použití původního typu User jsme byli schopni uložit hodno​tu undefined do proměnných lastName a thirdName


zatímco po aplikaci Required již hodnotu undefined vložit do proměnných lastName a thirdName není povoleno a následující kód skončí chybou. Ušetřete si práce a mějte toto chování na paměti.

​​​Závěrem

Tentokrát jsme si ukázali, jak se standardně Required chová a také jsme se seznámili se situací, jak se jeho chování změní, když je parametr strictNullChecks nastaven na hodnotu true. Příště se zaměříme na Capitalize a Uncapitalize.


Zajímáte se o Typescript? Skvělé, máme tady pro vás další témata: 

Efektivní Typescript

Typescript: typy pro manipulaci s řetězci

Otevřené pozice v Cleverlance
Sdílet
Odebírat