타입스크립트의 [[Generics|타입변수]](아래의 예제에서는 T)에 아무 타입이나 넘길 수 있기 때문에 문제가 발생하는 경우가 있다. ```typescript const obj = {}; const shouldBeRecordType = <T>(t: T) => obj[t] // // Error! const shouldBeRecordTypeSolution = <T extends string>(t: T) => obj[t] shouldBeRecordTypeSolution("hello") shouldBeRecordTypeSolution(2) // Error! ``` 위의 예제에서 `obj` 의 Key로 넘길 수 있는 타입은 제한되어있는데 `shouldBeRecordType` 같은 함수를 생성하게 되면 `t`가 `obj`의 Key 타입이 될 수 없다는 에러가 발생한다. `obj` 같은 타입은 반드시 Key에는 `string | number | symbol` 타입만 올 수 있는데 그러기 위해선 T의 타입 범위를 제한하면 문제를 해결할 수 있다. 이걸 그림으로 표현하면, 아래와 같다. `T`라는 타입변수에 `Object`, `number`, `symbol`과 같이 다양한 타입들이 입력될 수 있는데 string 으로 제한하게 되면 `string` 내부에 속하는 집합들만 타입변수로 넘길 수 있다. ![[type constraint.png]] --- 참조 강의: https://inf.run/FVDi