TypeScript 4.1 Beta dostępny z nowymi funkcjami
Sierpień zakończył się wydaniem stabilnej wersji Typescript 4.0. O nowościach zawartych w tym wydaniu pisaliśmy w czerwcu, po wydaniu wersji beta tego języka. Dzisiaj przedstawiamy funkcje zawarte w świeżo opublikowanej wersji TypeScript 4.1 Beta. Nowa wersja posiada wiele nowości, m.in. flagi kontrolne, ulepszenia prędkości oraz aktualizacje produktywności edytora.
Typy literałów szablonów w TypeScript 4.1 Beta
Jedną z najciekawszych funkcji dodaną w TypeScript 4.1 Beta są typy literałów szablonów.
Typy literałów ciągów
Ich głównym celem jest modelowanie funkcji i interfejsów API, oczekujących zestawu określonych ciągów.
Another use of @TypeScript 4.1's template literal types: extracting the URL parameters from an express route. Pretty amazing you can do this in the type system! https://t.co/gfZQy70whg pic.twitter.com/aEyfMwjjqX
— Dan Vanderkam (@danvdk) September 4, 2020
function setVerticalAlignment(color: "top" | "middle" | "bottom") { // ... } setVerticalAlignment("middel"); // ~~~~~~~~ // error: Argument of type '"middel"' is not assignable to // parameter of type '"top" | "middle" | "bottom"'.
Jest to całkiem przydatna funkcja, jak widać, typy literałów sprawdzają pisownię wartości ciągu. Oprócz tego programiści otrzymują możliwość używania literałów jako nazw właściwości w typach mapowanych.
type Options = { [K in "noImplicitAny" | "strictNullChecks" | "strictFunctionTypes"]?: boolean }; // same as // type Options = { // noImplicitAny?: boolean, // strictNullChecks?: boolean, // strictFunctionTypes?: boolean // };
Szablon
Składnia szablonu typu ciągów literału jest taka sama jak w JavaScript, jednak używany w pozycji type. Używając go z konkretnymi typami literałów, przez łączenie zawartości tworzy nowy jego typ.
type World = "world"; type Greeting = `hello ${World}`; // same as // type Greeting = "hello world";
Ciekawą opcją jest także tworzenie wszystkich możliwych literałów ciągu.
type Color = "yellow" | "blue"; type Quantity = "one" | "two"; type SeussFlower = `${Quantity | Color} flower`; // same as // type SeussFlower = "one flower" | "two flower" // | "yellow flower" | "blue flower";
Odwzorowany typ w TypeScript 4.1 Beta
Odwzorowany typ tworzy nowe typy obiektów na podstawie dowolnych kluczy lub kompletnie nowe obiekty oparte na innych typach. Nowa funkcja dodana do TypeScript 4.1 Beta przede wszystkim pozwala na ponowne mapowanie kluczy przy pomocy klauzuli as. W efekcie korzystając z typów literałów szablonów, łatwiej się tworzy nazwy właściwości na podstawie starych.
Rekurencyjne typy warunkowe
TypeScript 4.1 Beta zmniejsza ograniczenia dotyczące typów warunkowych. Dzięki temu mogą one modelować te wzorce. Łatwiejsze teraz będzie pisanie rekurencyjnych aliasów typów, ponieważ typy warunkowe będą się odwoływać do siebie w swoich gałęziach. Przykładowo, chcąc napisać typ, by dostać typy elementów zagnieżdżonych tablic, programista napisze następujący typ deepFlatten.
type ElementType<T> = T extends ReadonlyArray<infer U> ? ElementType<U> : T; function deepFlatten<T extends readonly unknown[]>(x: T): ElementType<T>[] { throw "not implemented"; } // All of these return the type 'number[]': deepFlatten([1, 2, 3]); deepFlatten([[1], [2, 3]]); deepFlatten([[1], [[2]], [[[3]]]]);
Warto jednak pamiętać, że te typy wykonują dużo pracy, więc czas sprawdzania typów może się wydłużyć. Oprócz tego istnieje ryzyko osiągnięcia przez nie wewnętrznego limitu głębokości rekurencji (dla złożonych danych wejściowych). Przez to pojawi się błąd podczas kompilacji.
Nowe flagi kontrolne
Wbudowana funkcja podpisów indeksu sygnalizuje systemowi typów o dostępie użytkowników do właściwości o dowolnych nazwach. Dlatego też wersja beta TS dostarcza nową flagę kontrolną
–noUncheckedIndexedAccess. Dzięki temu każdy dostęp do właściwości lub dostępu indeksowanego uznawany jest za potencjalnie niezdefiniowany. Jednak konsekwencją korzystania z tej flagi jest dokładniejsze sprawdzanie indeksowania w tablicy, także w pętli z kontrolą granic.
Funkcje z React 17 w TypeScript 4.1 Beta
W związku z nowym kandydatem do wydania React 17, do wersji beta TS dodano dwie nowe opcje obsługujące jsx i jsxs:
- react-jsx – do kompilacji produkcyjnej,
- react-jsxdev – do kompilacji deweloperskiej.
Podsumowanie
Aby rozpocząć korzystanie z wersji beta, możesz pobrać ją za pośrednictwem NuGet lub skorzystać z npm za pomocą następującego polecenia:
npm install maszynopis @ beta
Źródło: DevBlogs