TypeScript 제네릭 이해하기
제네릭은 TypeScript의 가장 강력한 기능 중 하나입니다. 실전 예제로 차근차근 살펴봅시다.
문제 상황
제네릭이 없으면 타입마다 함수를 따로 만들어야 합니다:
function firstString(arr: string[]): string | undefined {
return arr[0];
}
function firstNumber(arr: number[]): number | undefined {
return arr[0];
}
해결책
제네릭을 쓰면 한 번만 작성하면 됩니다:
function first<T>(arr: T[]): T | undefined {
return arr[0];
}
const name = first(["Alice", "Bob"]); // string
const age = first([25, 30]); // number
제약 조건
extends로 허용할 타입을 제한할 수 있습니다:
function getLength<T extends { length: number }>(item: T): number {
return item.length;
}
getLength("hello"); // ✅
getLength([1, 2, 3]); // ✅
getLength(42); // ❌ Error
제네릭 인터페이스
interface Repository<T> {
getById(id: string): Promise<T>;
getAll(): Promise<T[]>;
save(item: T): Promise<void>;
}
제네릭은 타입 안정성을 유지하면서 코드 재사용성을 높여줍니다. 단순한 형태로 시작해서 필요할 때 제약을 추가하세요.