Ondřej Langer
TypeScript je dnes ve webovém vývoji pro většinu vývojářů snad již standardem. V ApiTree tomu samozřejmě není jinak, a proto se pojďme zaměřit na jeho nejnovější, pátou verzi.
I když se jedná o „major“ verzi, tak obsah novinek může někomu možná připadat trochu slabší. Nicméně, můžeme zde rozeznat tři znatelné změny, které jsem si osobně oblíbil a o které bych se tu s vámi rád podělil.
Volnější definice importů
O volnějším zápisu modulovaných importů se musím zmínit hned z kraje. Před touto verzí si TypeScript vynucoval striktně koncovku “.js” (či “.mjs”). Pro import modulů nicméně tento způsob zápisu značně komplikuje přechod ze starého CommonJS.
Zároveň to značně komplikuje práci, když na konečný bundling souborů něco jiného než TypeScript.
Nyní je možnost zápisu o něco volnější. Stačí využít option moduleResolution s hodnotou bundler a můžete resolution nechat na bundleru.
Ať už se nám to líbí nebo ne, tak doporučení stále platí - pro lepší a rychlejší lookup je v importu prostě lepší používat koncovku „.js”, nebo „.mjs”.
Stable dekorátory
Těm se pochopitelně nemůžeme vyhnout. Od prvotních návrhů se po několika letech celkem proměnili.
Samotný nápad dekorátorů se moc neliší od toho z jiných jazyků, kde třídu, vlastnost, metodu a jiné můžeme obalit další logikou, která se často opakuje.
Dejme tomu, že máme metodu a chceme logovat do konzole, jak dlouho úkon dané metody trvá. Tady se nám otevírá příležitost vytvořit na to dekorátor.
Další možný způsob využití je kupříkladu obalení vlastnosti s nějakou další logikou pomocí getterů a setterů.
I když je v komunitě webového vývoje vidět velký zájem o dekorátory na JavaScript backendu (jako tomu je například u frameworku Fastify), na frontendu toho moc není. Vypadá to taky, že toho v blízké době ani moc nebude.
Ať to dopadne jakkoliv, určitě doporučuju se o znalost dekorátorů obohatit.
Úprava enumů
Za mě je to asi poslední z letošních významných změn TypeScriptu. Než se ale posuneme dál, musím vás varovat, ve výsledku jsou si stále podobné.
TypeScript enumy je celkem horké téma a horkým tématem i nadále zůstane, jelikož změna, která je v této verzi, se mění jenom svojí reflektivností typů.
Nyní jsou všechny enumy, jako union enumy. I když tedy nedefinujeme enumy jako literal enumy, tak stejně můžeme čerpat výhody union enumů.
Potenciální výhodou tedy je, že můžeme mít computed literals - čili hodnota enumu může být vypočítána externí funkcí jako třeba Math.random().
Jako Bonus
Je potřeba se ještě zmínit o const type parameter.
Původně, když TypeScript inferoval typ z parametru, tak inferoval základní typ. Array s jasnými hodnotami byl převzat jako array of strings.
Toto chování nemusí být logické a nová verze toto chování upravila.
Inferace typu může být absolutní (jako const). Stačí tedy jen přidat keyword “const” k definici typového parametru funkce.
Tím se zbavíme taky velkého množství “as const” v parametrech. YES!!!
Závěrem…
…stojí za zmínku konečně i podpora pro “export type *“, nějaké to menší zlepšení rychlosti kompilace a celkové zeštíhlení library zhruba o ~45%!
Doporučuju si otevřít jejich originální playground, nebo si rovnou zkusit vytvořit nový TypeScript projekt a natrénovat si v něm dané změny.
Osobně si myslím, že bude hlavně vidět samotný compile time a velikost TypeScriptu.
Do budoucna se rozhodně těším na rychlejší compile time, určitě sním o přepisu kompilační vrstvy do Rustu a nemůžu se dočkat, až nám TypeScript bude dělat kafe.
Happy Coding!
Just leave us a message using the contact form or contact our sales department directly. We will arrange a meeting and discuss your business needs. Together we will discuss the options and propose the most suitable solution.