generic constraint

제약은 “받을 타입”보다 “보장할 동작”에서 고른다

제네릭을 유지하려면 타입을 하나로 고정하지 말고, 함수 내부에서 꼭 필요한 속성, 키, 생성자, 객체성 같은 최소 조건만 선언한다.

제약 선택지

choose by need
1

속성 보장

T extends Lengthwise처럼 필요한 멤버가 있는 타입만 받는다.

2

키 제한

K extends keyof T로 객체에 실제 존재하는 키만 선택하게 한다.

3

생성자 제한

new (...) => T와 클래스 제약으로 팩토리 반환 타입을 지킨다.

4

객체 결합

T extends object로 스프레드와 인터섹션 반환을 안전하게 만든다.

판단 사례

keep inference
arg.length

멤버 접근

멤버를 읽어야 하면 구조적 제약을 먼저 둔다.

obj[key]

동적 키

키 이름은 값 타입과 묶어야 잘못된 문자열을 막는다.

T & U

병합 결과

입력 객체의 구체 타입을 보존해 결과 타입까지 추론하게 한다.

설계 원칙

제약 조건은 타입을 좁혀 버리는 장치가 아니라, 제네릭의 추론을 유지한 채 함수 내부에서 필요한 조작만 허용하는 안전장치입니다.