型を引数として使えるようにして、再利用しやすくする。
例)
// 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"}));