mosya

mosya<TC> - 配列の長さを返すLength<T>を作ろうの解説

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

問題

タプルTを受け取り、そのタプルの長さを返す型Length<T>を実装します。

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

type tesla = [
  "tesla",
  "model 3",
  "model X",
  "model Y"
];
type spaceX = [
  "FALCON 9",
  "FALCON HEAVY",
  "DRAGON",
  "STARSHIP",
  "HUMAN SPACEFLIGHT"
];

type teslaLength = Length<tesla>; // expected 4
type spaceXLength = Length<spaceX>; // expected 5

前提知識

この問題を解くにあたって型についての以下の知識を理解しておく必要があります。

  1. ジェネリクスを理解する
  2. 配列から要素の長さを取得するインデックス

ジェネリクスを理解する

まず、<T>というのは、ジェネリクスと呼ばれる機能です。ジェネリクスは、型をパラメータとして受け取ることができる機能です。

この受け取った値を使って、新しい型を生成することができます。
受け取った型を活用して、新しい型を生成することができるので、型の再利用性が高くなります。

例えば、以下のような型が考えられます

type Foo<T> = {
  bar: T;
};

この型は、Tという型を受け取り、barというプロパティにTを代入する型です。

この型を使うと、以下のように型を指定することができます。

type FooString = Foo<string>; // { bar: string }
type FooNumber = Foo<number>; // { bar: number }

このようにジェネリクスは型を引数として受け取って、新しい型を生成することができます。

配列から要素の長さを取得するインデックス

配列(配列型)から要素の長さを取得するには、T['length']を使用します。

type tesla = [
  "tesla",
  "model 3",
  "model X",
  "model Y"
];
type teslaLength = tesla["length"]; // 4

まとめ

以上の前提知識を元に、Length型を実装すると以下のようになります。

type Length<T extends any[]> =
  T["length"];

このように、ジェネリクスを使って、配列の長さを取得することができます。

Authored by

筆者の写真

Godai@steelydylan

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

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

詳しくはこちら
mosya

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

© 2023 - mosya. All rights reserved.