課題

タプルが与えられたとき、そのタプルの長さを返すような Length を実装してくださ い。

例:

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

解答

JavaScript では length プロパティを使用して配列の長さにアクセスできることをご 存知でしょう。型においても同様のことが可能です:

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

しかし、この方法では Type ‘length’ cannot be used to index type ‘T’ というコンパ イルエラーが発生してしまいます。そのため、型変数がこのプロパティをもっていること を TypeScript に伝えておく必要があります:

type Length<T extends { length: number }> = T["length"];

参考