- 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
Dies ist eine KI-übersetzte Version.
Zusammenfassung des Beitrags durch durumis AI
- Das manuelle Eintippen von Typen in TypeScript kann die Lesbarkeit beeinträchtigen. Durch die Verwendung von Hochordnungs-Typen können sie übersichtlicher definiert werden.
- Mit der hotscript-Bibliothek können Typdefinitionen auf Basis von Hochordnungs-Typen prägnant verwaltet werden.
- Es wird empfohlen, die hotscript-Bibliothek mit ihren vielfältigen Funktionen zu nutzen, um die Lesbarkeit des Codes zu verbessern und sie bei Bedarf zu verwenden.
Nehmen wir als Beispiel einen Codeabschnitt.
Es ist ein Code, der den ersten Buchstaben jedes Wortes in Großbuchstaben umwandelt.
const firstLetterUpperCase = (str : string) => { return str.split(" ").map(v => ${v.charAt(0).toUpperCase()}${v.slice(1)}).join(" "); } console.log(firstLetterUpperCase("hello world"));
Das ist zwar einfach, aber der Rückgabetyp wird dann zu string, was die Typinferenz verhindert.
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"));
Natürlich kann man den Typ wie oben einzeln eingeben.
Aber der oben genannte Typ ist meiner Meinung nach nicht gut lesbar. Verschachtelte ternäre Operatoren und die rekursive Struktur sind wohl das Problem.
Aber überraschenderweise unterstützt TypeScript Higher-Order-Typen.
Und auf Basis dieser Higher-Order-Typen gibt es eine Higher-Order-Typ-Bibliothek.
Mit dieser Bibliothek kann die Typdefinition übersichtlich gestaltet werden.
type FirstLetterUppercase2= Pipe< T, [ Strings.Split<" ">, Tuples.Map<Strings.Capitalize>, Tuples.Join<" "> ] >; type A = FirstLetterUppercase2<"hello world">; // ^? type = "Hello World"
Der Code befindet sich hier.
Auf diese Weise konnten wir die Typdefinition dank Higher-Order-Typen übersichtlicher gestalten.
Es gibt noch viele weitere Funktionen. Schauen Sie sich die Website einmal an und verwenden Sie sie, wenn Sie sie benötigen.