- 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
AIが翻訳した投稿です。
durumis AIが要約した投稿
- TypeScriptでタイプを手動で入力するのは、可読性が低下する可能性があり、高階型を使用するとよりクリーンに定義できます。
- hotscriptライブラリを使用すると、高階型に基づいてタイプ定義を簡潔に管理できます。
- さまざまな機能を提供するhotscriptライブラリを活用して、コードの可読性を向上させ、必要に応じて活用することをお勧めします。
例として、1つのコードを見てみましょう。
各単語の最初の文字を大文字に変換するコードですね。
const firstLetterUpperCase = (str : string) => { return str.split(" ").map(v => ${v.charAt(0).toUpperCase()}${v.slice(1)}).join(" "); } console.log(firstLetterUpperCase("hello world"));
シンプルですが、これだとreturn typeが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"));
もちろん、上記のように型を1つずつタイプして行うことができます。
しかし、上記のような型は可読性が良くないと感じます。ネストされた三項演算子と再帰構造が問題でしょう。
しかし驚くべきことに、TypeScriptは高階型をサポートしています。
そして、その高階型に基づいて、高階型ライブラリが1つあります。
このライブラリを使用することで、型定義をきれいに整理することができます。
type FirstLetterUppercase2= Pipe< T, [ Strings.Split<" ">, Tuples.Map<Strings.Capitalize>, Tuples.Join<" "> ] >; type A = FirstLetterUppercase2<"hello world">; // ^? type = "Hello World"
このコードはここにあります。
このように、高階型によって、可読性の高い型整理が可能になりました。
他にも様々な機能があるので、一度サイトにアクセスして見て、必要な時に利用するのが良いでしょう。