🔍 검색 키워드: TypeScript 제네릭 타입 추론, 제네릭 제약 조건, Generic extends, TypeScript 고급 타입, 타입 안전성
TypeScript 제네릭 타입 추론 완벽 정복
증상: 제네릭이 자동 추론되지 않는다
함수에 제네릭을 사용했는데 타입이 unknown이거나 명시적으로 지정해야 하나요?
이것이 제네릭 타입 추론의 복잡성입니다. 동작하지 않으면 수동 타입 지정이 필요하지만, 올바른 제약 조건을 설정하면 자동 추론이 가능합니다.
원인 분석
원인 1: 제약 조건 없는 제네릭
function processArray<T>(arr: T[]): T[] {
return arr.sort(); // ❌ 에러: T에 sort가 있다는 보장 없음
}
원인 2: 여러 제네릭 간 관계 미정의
function transform<T, U>(input: T): U {
return input as U; // ❌ 위험한 as 사용
}
해결 방법
✅ 방법 1: 제약 조건으로 구조 정의 (extends)
function getProperty<T, K extends keyof T>(obj: T, key: K): T[K] {
return obj[key]; // ✓ key는 T의 키만 가능
}
✅ 방법 2: infer로 중첩 타입 추출
type GetArrayElement<T> = T extends Array<infer U> ? U : never;
type NumArray = GetArrayElement<number[]>; // number ✓
✅ 방법 3: 조건부 타입으로 분기
type IsString<T> = T extends string ? true : false;
type A = IsString<'hello'>; // true ✓
type B = IsString<number>; // false ✓
결론
- 제약 조건(extends)은 필수 — 타입 안전성과 추론 향상
- infer로 타입 추출 — 제네릭 값을 유연하게 활용
- 조건부 타입으로 분기 — 복잡한 타입 관계 표현
- 오버로드로 정확하게 — 여러 입출력 조합 처리
제네릭을 마스터하면 TypeScript의 진정한 강력함을 경험할 수 있습니다.
댓글 없음:
댓글 쓰기