TypeScript 제네릭을 공부하고 있는데, extends 키워드가 헷갈립니다.
function getProperty<T extends object, K extends keyof T>(obj: T, key: K): T[K] {
return obj[key];
}여기서 T extends object는 "T가 object를 상속한다"는 뜻인가요, 아니면 "T가 object 타입이어야 한다"는 뜻인가요? 클래스 상속의 extends와 다른 건가요?
댓글 2
좋은 질문입니다. 제네릭에서
extends는 클래스 상속이 아니라 타입 제약(constraint)입니다.T extends object는 "T는 object에 할당 가능한 타입이어야 한다"는 뜻입니다. 즉string,number같은 원시 타입은 안 되고, 객체 타입만 허용한다는 의미예요.마찬가지로
K extends keyof T는 "K는 T의 키 중 하나여야 한다"는 제약입니다.쉽게 기억하는 방법:
extends= "상속한다"extends= "~의 부분집합이다" 또는 "~에 할당 가능하다"extends= "~에 할당 가능하면"세 가지 맥락에서 의미가 조금씩 다르지만, 핵심은 항상 타입 호환성 체크입니다.
"부분집합" 이라는 표현이 딱 이해되네요. 감사합니다!