はじめに TypeScript の型は世界一自由度の高い設計になっていると思います。 その根拠として、型を関数型のように書けるというのが大きいと思います。 type Trim<S extends string> = S extends ` ${infer R}` | `${infer R} ` ? Trim<R> : S; 例えば、これは文字列の両端から空白を取り除く、str.trim() 相当のジェネリクスを含んだ型です。 (ジェネリクスは、型で用いられる引数のような存在だと思って貰えれば大丈夫です。) 実際に見てみましょう。 TypeScript Playground (この記事では、TypeScript v5.8 を使用します。) しっかり、str.trim() 相当の処理が型のみで推論できていることが分かります。 こんな事をここまで簡単に出来る言語は、TypeScript ぐらいで
