- GitHub - gvergnaud/hotscript: A library of composable functions for the type-level! Transform your TypeScript types in any way you want using functions you already know.
- A library of composable functions for the type-level! Transform your TypeScript types in any way you want using functions you already know. - gvergnaud/hotscript
Tekst przetłumaczony przez AI.
Podsumowanie posta wygenerowane przez AI durumis
- Ręczne wpisywanie typów w TypeScript może prowadzić do zmniejszenia czytelności, a użycie typów wyższego rzędu pozwala na bardziej przejrzyste definiowanie.
- Biblioteka hotscript pozwala na zwięzłe zarządzanie definicjami typów w oparciu o typy wyższego rzędu.
- Zalecamy wykorzystanie biblioteki hotscript, która oferuje szeroki zakres funkcji, co pozwala na zwiększenie czytelności kodu i elastyczne dostosowanie do potrzeb.
Weźmy na przykład jeden fragment kodu.
Kod, który zamienia pierwszą literę każdego słowa na dużą.
const firstLetterUpperCase = (str : string) => { return str.split(" ").map(v => ${v.charAt(0).toUpperCase()}${v.slice(1)}).join(" "); } console.log(firstLetterUpperCase("hello world"));
Jest to proste rozwiązanie, ale w jego wyniku typ zwracany staje się string, co uniemożliwia wnioskowanie o typie.
type FirstLetterUppercase = T extends ${infer R}${infer RestWord} ${infer RestSentence} ? ${Uppercase<R>}${RestWord} ${FirstLetterUppercase<RestSentence>} : T extends ${infer R}${infer RestWord} ? ${Uppercase<R>}${RestWord} : never; const firstLetterUpperCase= (str : T) : FirstLetterUppercase => { return str.split(" ").map(v => ${v.charAt(0).toUpperCase()}${v.slice(1)}).join(" ") as FirstLetterUppercase ; } console.log(firstLetterUpperCase("hello world"));
Oczywiście można zdefiniować typ ręcznie, tak jak pokazano powyżej.
Jednak taki sposób definiowania typu jest mało czytelny. Zagnieżdżone operatory warunkowe i struktura rekurencyjna utrudniają zrozumienie kodu.
Na szczęście TypeScript obsługuje typy wyższego rzędu.
I na ich podstawie istnieje biblioteka typów wyższego rzędu.
Korzystając z tej biblioteki, można uprościć definicję typu.
type FirstLetterUppercase2= Pipe< T, [ Strings.Split<" ">, Tuples.Map<Strings.Capitalize>, Tuples.Join<" "> ] >; type A = FirstLetterUppercase2<"hello world">; // ^? type = "Hello World"
Powyższy kodznajduje się tutaj.
W ten sposób, dzięki typom wyższego rzędu, możemy uporządkować definicje typów w bardziej czytelny sposób.
Biblioteka ta oferuje wiele innych funkcji, więc warto odwiedzić jej stronę i zapoznać się z nimi, aby móc z nich korzystać w razie potrzeby.