📝
TypeScript ジェネリクス型定義Array理解
はじめに
型定義のジェネリック型に関して、
const stringArray: Array<string> = ["apple", "banana", "cherry"];
もジェネリック型の理由をまとめました。
今回の疑問:Array<string>もジェネリック型?
ジェネリクス型定義とは、
「型をパラメータ化し、型を抽象的な型引数として扱うことで、型を後から具体的に指定できるようにする仕組み」
であると理解していました。
コード例:
const identity = <T>(arg: T): T => arg;
const myString: string = identity<string>("hello");
上記のように、<T> を使用して型を抽象化することをジェネリクス型だと理解しており、
以下の例もジェネリクス型であると知り、ジェネリック型の定義がわからなくなりました。
const stringArray: Array<string> = ["apple", "banana", "cherry"];
Array<string> は <string> と具体的な型を指定しているため、ジェネリクス型として扱うことに違和感があったのですが、、、
Array<string>がジェネリック型の理由
Arrayは
「ジェネリクス型として定義された組み込みの型定義」
であることが分かりました。
Arrayは要素の型を特定しない汎用的な配列の型定義
const stringArray: Array<string> はジェネリクス型である Array に対して string 型を指定している。
つまり、Array 自体がジェネリクス型として定義されており、<string> はその型引数であるため、Array<string> もジェネリクス型として扱われる、ってことなんですね。
結論
Array<string>がジェネリック型なのは、
「ジェネリクス型として定義された組み込みの型定義」
だから、ってことでした。
Discussion
というよりも
Array<T>
の型引数を設定して使っているってだけなのでは……?(一般的にジェネリクス型は
<T>
の様な型引数を取る形式それならまだ 明示的な型引数を持たない
string[]
が ジェネリクス型 かどうかわからないの方がまだわかる気もするが……