- 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
Texte traduit par l'IA.
Résumé du texte par durumis AI
- La saisie manuelle des types en TypeScript peut nuire à la lisibilité. L'utilisation de types d'ordre supérieur permet de les définir plus proprement.
- La librairie hotscript permet de gérer la définition des types de manière concise en s'appuyant sur les types d'ordre supérieur.
- Nous vous recommandons d'utiliser la librairie hotscript qui offre de nombreuses fonctionnalités pour améliorer la lisibilité de votre code et de l'utiliser en fonction de vos besoins.
Prenons un exemple de code.
Il s'agit d'un code qui convertit la première lettre de chaque mot en majuscule.
const firstLetterUpperCase = (str : string) => { return str.split(" ").map(v => ${v.charAt(0).toUpperCase()}${v.slice(1)}).join(" "); } console.log(firstLetterUpperCase("hello world"));
C'est simple, mais cela rend le type de retour égal à string, ce qui rend l'inférence de type impossible.
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"));
Bien sûr, on peut taper chaque type un par un comme ci-dessus.
Mais ce type ci-dessus est difficile à lire. L'opérateur ternaire imbriqué et la structure récursive sont probablement le problème.
Mais étonnamment, TypeScript prend en charge les types d'ordre supérieur.
Et il existe une bibliothèque de types d'ordre supérieur basée sur ces types d'ordre supérieur.
Cette bibliothèque permet d'organiser proprement la définition des types.
type FirstLetterUppercase2= Pipe< T, [ Strings.Split<" ">, Tuples.Map<Strings.Capitalize>, Tuples.Join<" "> ] >; type A = FirstLetterUppercase2<"hello world">; // ^? type = "Hello World"
Le code est disponible ici.
De cette façon, nous avons pu organiser proprement les types grâce aux types d'ordre supérieur.
Il existe d'autres fonctionnalités, alors n'hésitez pas à visiter le site et à les utiliser si nécessaire.