ジェネリクスとは?

型を引数として使えるようにして、再利用しやすくする。

ジェネリクス型の書き方

例)

// function 関数名 <◯○○>(引数) {...処理} ◯には好きな文字を使える

function copy<T>(value: T): T{
        return value
}
console.log(copy("Hello").toUpperCase)

同じ型が入ると言う事を明示できる。

その為、console.logではstring型が入っているので、関数の型も、引数も戻り値も全部string型ですねって判断してくれている。

型パラメータに制約をつける方法

<T>とする事で、引数や戻り値にも同じ型を定義する事ができました。

しかし今はなんでも入っちゃう状況です。

ジェネリクス型では、入れられるものに制限をつける事もできます。

下記のように extends を使う方法です。

extendsの後にinterfaceらの様にパラメータと型を書いてあげれば、入れられるものを狭めることが出来ます。

function copy<T extends {name: string}>(value: T): T{
        return value
    }

console.log(copy("Hello") // こちらはエラーオブジェクトではないし、nameプロパティもない
console.log(copy({name: "Bob"}));

interfaceにジェネリクス型をつける方法