型をパラメータ化し、再利用可能な型安全なコードを書く
function identity<T>(value: T): T { return value; }
// 型パラメータに制約をつける
function getProperty<T, K extends keyof T>(obj: T, key: K): T[K] {
return obj[key];
}
// ジェネリッククラス
class Stack<T> {
private items: T[] = [];
push(item: T) { this.items.push(item); }
pop(): T | undefined { return this.items.pop(); }
}型パラメータはT、U、Kなど慣習的な名前を使う。extendsで制約をかけることで安全なアクセスが可能になる。