TypeScript-제약조건(Constraints/keyof)

hannah·2023년 9월 28일
0

JavaScript

목록 보기
109/121

제약조건(Constraints/keyof)

  • 제너릭에는 원하지 않는 속성에 접근하는 것을 위해 제약조건을 사용할 수 있다.
    1. Constraints: 특정 타입들로만 동작하는 제너릭 함수를 만들 때 사용한다.
    1. keyof: 두 객체를 비교할 때 사용한다.

1. Constraints

  • 제너릭 T에 제약 조건을 설정할 때 사용한다.(문자열이나 숫자)
  • 제약 조건을 벗어나는 타입을 선언하면 에러가 발생한다.
const preingMessage = <T extends string | number>(message: T): T => {
  return message;
};

printMessage<String>("1");
printMessage<Number>(1);
printMessage<Boolean>(false);	// Error
// 제너릭 T에 String과 Number에 벗어나는 타입인 Boolean을 선언했기 때문에 에러 발생

2. keyof

  • 두 객체 간의 값을 비교할 때 사용하는 제너릭의 제약 조건이다.
const getProperty = <T extends object, U extends keyof T>(obj: T, key: U) => {
  return obj[key];
};

getProperty({ a: 1, b: 2, c: 3 }, "a");

getProperty({ a: 1, b: 2, c: 3 }, "z"); // Error

위의 코드는 getProperty 함수에 두 파라미터 T, U를 선언했다. T는 object 갖는 제약조건을 걸었고, U는 그 T를 갖는 제약조건을 걸었다. 첫번째 함수와 다르게 두번째 함수에서는 오류가 발생한다. 제너릭 T는 키 값이 a,b,c만 존재하는 object인데 U의 값인 'z'가 제너릭 T의 키 값(a,b,c) 중 존재하지 않기 때문에 오류가 발생한다.

0개의 댓글