index type은 타입을 동적으로 사용할 때 이용.function objectValues(obj, prop) { return obj[prop]; }위의
javascript를 보면 객체obj와property를 받아서 그 키값의value를return하는 함수가 있다.이를
typescript로 표현하면function objectValue<T, K extends keyof T>(obj: T, prop: K): T[K] { return obj[prop]; }로 표현할 수 있다.
interface Person { name: string; age: number; hobby: string; married: boolean; } const hemtory: Person = { name: '햄토리', age: 10, hobby: '프로그래밍', married: false };위에서 정의된
interface를 이용해 객체를 하나 만들고,objectValues함수에 넣어보면 아래와 같다const name = objectValue(hemtory, 'name'); // '햄토리' const age = objectValue(hemtory, 'age'); // 10
keyof T는인덱스 타입 쿼리 연산자이다.
keyof T를 사용하면 그 객체의property들을 알 수 있다.let personProps: keyof Person;위 코드의
personProps는Person에서 정의된 타입들의Union과 같다.
즉,name | age | hobby | married중 하나이다.
기존에 없는
property를 사용할 때 에러가 난다.let job: PersonProps = objectValue(hemtory, 'job'); // 에러만약
Person에 새로job: string타입이 추가된다면
자동으로name | age | hobby | married에job이 추가되서
name | age | hobby | married | job이 된다.그냥 어떤 타입들이 있는지 확인할 때만 사용하는건지 용도가 뭔지는 잘 모르겠다.
T[K]는인덱스 접근 연산자이다.function objectValue<T, K extends keyof T>(obj: T, prop: K): T[K] { return obj[prop]; }에서
obj[prop]은T[K]타입이 된다.
K가 뭔지에 따라 타입이 동적으로 바뀌는 것이다.
K는T의property중 하나의 타입이므로 정의되지 않은 타입이K로 들어가면 에러가 난다.const job = objectValue(hemtory, 'job'); // 에러