generated at
LengthOfString<S>
文字列を引数にとって、その長さを返す


使用例
ts
type A0 = LengthOfString<''>; // 0 type A7 = LengthOfString<'mrsekut'>; // 7 type A16 = LengthOfString<'Sound! Euphonium'>; // 16



考え方のポイント
イメージ的にはこういうことをしたい
ts
type LengthOfString<S extends string> = S extends `${infer H}${infer Tail}` ? 1 + LengthOfString<Tail> : 0;
1文字ずつ消化しつつ、結果( number )を1ずつインクリメントして再帰すればいい
しかし、型レベルの数値演算はできないので、それに代わる方法を考える必要がある
配列のlengthで型レベルincrement/decrementのはたまに見かけるパターンmrsekut
再帰の度に配列の要素を追加していき、最終的に strArr['length'] で長さを取ればいい



定義例1
ts
type LengthOfString<S extends string> = StrToArray<S>['length']; type StrToArray<S extends string> = S extends `${infer H}${infer Tail}` ? [H, ...StrToArray<Tail>] : [];
ちなみに、 StrToArray の結果はこんな感じ
ts
type A = StrToArray<'mrsekut'>; // ["m", "r", "s", "e", "k", "u", "t"]



定義例2
ts
type LengthOfString<S extends string, L extends unknown[] = []> = S extends `${infer H}${infer R}` ? LengthOfString<R, [H, ...L]> : L['length'];
2つの型引数を使って、1つの型定義で、定義例1と同じことをしている