본문 바로가기
Q&A해결2026년 4월 10일1분 읽기

TypeScript 제네릭에서 extends 키워드 정확한 의미

프
프론트수진
조회 518댓글 2

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

김김영삼6개월 전

좋은 질문입니다. 제네릭에서 extends는 클래스 상속이 아니라 타입 제약(constraint)입니다.

T extends object는 "T는 object에 할당 가능한 타입이어야 한다"는 뜻입니다. 즉 string, number 같은 원시 타입은 안 되고, 객체 타입만 허용한다는 의미예요.

마찬가지로 K extends keyof T는 "K는 T의 키 중 하나여야 한다"는 제약입니다.

쉽게 기억하는 방법:

  • 클래스의 extends = "상속한다"
  • 제네릭의 extends = "~의 부분집합이다" 또는 "~에 할당 가능하다"
  • 조건부 타입의 extends = "~에 할당 가능하면"

세 가지 맥락에서 의미가 조금씩 다르지만, 핵심은 항상 타입 호환성 체크입니다.

프프론트수진6개월 전

"부분집합" 이라는 표현이 딱 이해되네요. 감사합니다!

Ctrl+Enter로 등록