mosya
mosya Business はこちら

mosya<TC> - LengthOfString型を実装して文字列の長さを型として取得しようの解説

この記事はmosya<TC>の問題の一つであるLengthOfString型の解説になります。

問題

String#length と同じように、文字列リテラルの長さを計算します。

例えば、以下のようなコードを満たすように実装しましょう。

type Length = LengthOfString<"hello">; // 5

解答例

type StrToArray<S> =
  S extends `${infer x}${infer xs}`
    ? [1, ...StrToArray<xs>]
    : [];
type LengthOfString<S extends string> =
  StrToArray<S>["length"];

文字列を配列に変換する型を作る

まず、StrToArrayという型を作成します。
文字列を配列に変換する型です。

以下の手順で文字列を配列に変換していきます。

  1. 文字列リテラルとinferを使って、代入されたSを最初の文字であるxとそれ以降の文字であるxsに分割します。
  2. 分割できる場合は、[1, ...StrToArray<xs>]という配列を返し、再度、StrToArrayを呼び出し、残りの文字であるxsに対して同じ処理を行います。
  3. これ以上分割できなくなった場合は、[]という空の配列を返します。

これにより例えばStrToArray"hello"という文字が代入された場合以下のような配列になります。

type Foo = StrToArray<"hello">; // [1, 1, 1, 1, 1]

配列の長さを取得する

次に、LengthOfStringという型を作成します。
文字列の長さを取得する型です。

先ほど作成したStrToArrayを使って、文字列を配列に変換し、その配列の長さを取得します。

type LengthOfString<S extends string> =
  StrToArray<S>["length"];

Authored by

筆者の写真

Godai@steelydylan

Webサービスを作るのが好きなWebエンジニア。子供が産まれたことをきっかけに独立し法人化。サービス開発が大好き。
好きな言語はTypeScript。

ReactやTypeScriptなどの周辺技術が学べる
オンライン学習サービスを作りました!

詳しくはこちら
mosya

mosyaはオンラインでHTML,CSS,JavaScriptを基本から学習できるサービスです。現役エンジニアが作成した豊富なカリキュラムに沿って学習を進めましょう。

© 2023 - mosya. All rights reserved.