- 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
Texto traducido por IA.
Resumen de la publicación por la IA de durumis
- Escribir tipos directamente en TypeScript puede reducir la legibilidad, y el uso de tipos de orden superior puede hacer que las definiciones sean más limpias.
- La biblioteca hotscript permite gestionar las definiciones de tipos de forma concisa basándose en tipos de orden superior.
- Se recomienda utilizar la biblioteca hotscript, que ofrece diversas funciones, para mejorar la legibilidad del código y utilizarla según sea necesario.
Tomemos un código como ejemplo.
Es un código que convierte la primera letra de cada palabra a mayúsculas.
const firstLetterUpperCase = (str : string) => { return str.split(" ").map(v => ${v.charAt(0).toUpperCase()}${v.slice(1)}).join(" "); } console.log(firstLetterUpperCase("hello world"));
Es simple, pero esto hace que el tipo de retorno sea string, y la inferencia de tipos es imposible.
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"));
Por supuesto, podemos escribir el tipo uno por uno como se muestra arriba.
Sin embargo, este tipo de escritura se siente poco legible. El operador ternario anidado y la estructura recursiva son el problema, ¿verdad?
Pero sorprendentemente, TypeScript admite tipos de orden superior.
Y hay una biblioteca de tipos de orden superior basada en tipos de orden superior.
Podemos usar esta biblioteca para organizar la definición de tipo de manera limpia.
type FirstLetterUppercase2= Pipe< T, [ Strings.Split<" ">, Tuples.Map<Strings.Capitalize>, Tuples.Join<" "> ] >; type A = FirstLetterUppercase2<"hello world">; // ^? type = "Hello World"
El código está aquí.
De esta manera, podemos organizar los tipos de manera legible mediante tipos de orden superior.
Además de esto, hay muchas otras funciones, así que es una buena idea echar un vistazo al sitio web y usarlo cuando sea necesario.