ジェネリック型は、型を定義したときには具体的な型を指定せず、型を利用する際に具体的な型が決まる仕組み。 後述するが、プレースホルダや関数のパラメータのようなものだと考えると、分かりやすい。 ジェネリック型はそれ自体が便利だし、TypeScript の他の機能と組み合わせることで複雑な型も表現できるようになる。 この記事の内容は TypeScript のv3.9.5で動作確認している。 宣言時には型が決まらず、あとから具体的な型がバインドされる 以下に、関数の型を 3 つ定義している。 type Foo = (arg: number) => number; // number を受け取り、number を返す type Bar = (arg: string) => string; // string を受け取り、string を返す type Baz = <T>(arg: T) => T;