- 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
Текст, переведенный ИИ.
Резюме публикации от ИИ durumis
- Прямое написание типов в TypeScript может снизить читабельность, а использование высших типов позволяет сделать определения более чистыми.
- Библиотека hotscript позволяет управлять определениями типов лаконично на основе высших типов.
- Рекомендуется использовать библиотеку hotscript, предоставляющую различные функции, для повышения читабельности кода и использования по мере необходимости.
Давайте возьмем один фрагмент кода в качестве примера.
Это код, который преобразует первую букву каждого слова в верхний регистр.
const firstLetterUpperCase = (str : string) => { return str.split(" ").map(v => ${v.charAt(0).toUpperCase()}${v.slice(1)}).join(" "); } console.log(firstLetterUpperCase("hello world"));
Несмотря на простоту, в этом случае тип возвращаемого значения становится string, и выведение типов становится невозможным.
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"));
Конечно, можно определить тип вручную, как показано выше.
Однако такой тип выглядит не очень читаемым. Вложенные тернарные операторы и рекурсивная структура — вот в чем проблема.
Но, что удивительно, TypeScript поддерживает высокоуровневые типы.
И на основе этих высокоуровневых типов существует библиотека высокоуровневых типов.
С помощью этой библиотеки можно упорядочить определение типов.
type FirstLetterUppercase2= Pipe< T, [ Strings.Split<" ">, Tuples.Map<Strings.Capitalize>, Tuples.Join<" "> ] >; type A = FirstLetterUppercase2<"hello world">; // ^? type = "Hello World"
Этот кодздесь.
Таким образом, благодаря высокоуровневым типам мы можем упорядочить типы более удобочитаемым способом.
Помимо этого, существует множество других функций, поэтому рекомендуется посетить сайт, ознакомиться с ними и использовать по мере необходимости.