- 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 traduzido pela IA.
Resumo do texto pela IA do durumis
- Digitar tipos diretamente no TypeScript pode resultar em baixa legibilidade, e o uso de tipos de ordem superior permite definições mais limpas.
- A biblioteca hotscript permite gerenciar definições de tipos de forma concisa com base em tipos de ordem superior.
- Recomendamos o uso da biblioteca hotscript, que oferece diversos recursos para melhorar a legibilidade do código e utilizar conforme necessário.
Vamos pegar um código como exemplo.
É um código que converte a primeira letra de cada palavra para maiúscula.
const firstLetterUpperCase = (str : string) => { return str.split(" ").map(v => ${v.charAt(0).toUpperCase()}${v.slice(1)}).join(" "); } console.log(firstLetterUpperCase("hello world"));
Simples, mas isso faz com que o tipo de retorno seja string, tornando a inferência de tipo impossível.
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"));
Claro, podemos digitar cada tipo um por um, como mostrado acima.
No entanto, esse tipo de tipagem parece ter pouca legibilidade. O operador ternário aninhado e a estrutura recursiva são os problemas, certo?
Mas, surpreendentemente, o TypeScript suporta tipos de ordem superior.
E, com base nesses tipos de ordem superior, existe uma biblioteca de tipos de ordem superior.
Usando essa biblioteca, podemos organizar a definição de tipo de forma limpa.
type FirstLetterUppercase2= Pipe< T, [ Strings.Split<" ">, Tuples.Map<Strings.Capitalize>, Tuples.Join<" "> ] >; type A = FirstLetterUppercase2<"hello world">; // ^? type = "Hello World"
O código está aqui..
Dessa forma, podemos organizar os tipos de forma legível usando tipos de ordem superior.
Além disso, existem várias outras funções, então visite o site, dê uma olhada e use-as quando precisar.