function getProperty<Type, Key extends keyof Type>(obj: Type, key: Key) {
return obj[key];
}
위의 함수는 Type에 대한 객체를 첫번째 인자로 받고 두번째 인자로 Type에 대한 프로퍼티의 키를 받습니다. 예들들면 다음과 같습니다.
let x = { a: 1, b: 2, c: 3, d: 4 };
getProperty(x, "a");
getProperty(x, "m");
위의 코드에서 4번째 코드는 “m” 형식의 인수는 “a” | “b” | “c” | “d” 형식의 매개 변수에 할당될 수 없습니다.”라는 에러가 발생합니다.
참고로 상기 코드에서 keyof가 사용되었는데, keyof 연산자는 객체 타입에서 객체의 키 값들을 숫자나 문자열 리터럴 유니언을 생성합니다. 아래 타입 P는 "x" | "y"와 동일한 타입입니다.
type Point = { x: number; y: number };
type P = keyof Point;
