더북(TheBook)

2.14.1 제네릭에 제약 걸기

타입 매개변수에는 제약(constraint)을 사용할 수 있습니다. extends 문법으로 타입 매개변수의 제약을 표시하는 것입니다. 타입의 상속을 의미하던 extends와는 사용법이 다릅니다. 타입 매개변수 A의 타입은 숫자 타입이어야 한다는 뜻입니다.

interface Example<A extends number, B = string> {
  a: A,
  b: B,
}
type Usecase1 = Example<string, boolean>;
// Type 'string' does not satisfy the constraint 'number'.
type Usecase2 = Example<1, boolean>;
type Usecase3 = Example<number>;

Usecase1 타입에서 A 자리에 string 타입을 넣었더니, 제약을 충족시키지 못했다는 에러가 발생합니다.

Usecase2 타입을 보면 A 자리에 number이기도 하면서 number보다 구체적인 타입인 1 리터럴 타입을 넣고 있습니다. 즉, 특정 타입 매개변수에 제약이 걸리면 제약에 어긋나는 타입은 입력할 수 없지만 제약보다 더 구체적인 타입은 입력할 수 있습니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.