[Typescript] Indexed Access Types

HoonDong_K·2025년 1월 16일

ts_doc

목록 보기
9/11
post-thumbnail

우리는 indexed accesss 타입을 사용하여 다른 타입에서 특정 속성을 조회할 수 있습니다.

type Person = { age: number; name: string; alive: boolean };
type Age = Person["age"];
     //type Age = number

인덱싱 타입 그 자체로 타입이기에, 우리는 유니온, keyof, 혹은 다른 타입을 전체적으로 사용할 수 있습니다.

type I1 = Person["age" | "name"];
     //type I1 = string | number
 
type I2 = Person[keyof Person];
     //type I2 = string | number | boolean
 
type AliveOrName = "alive" | "name";
type I3 = Person[AliveOrName];
     //type I3 = string | boolean

만약 존재하지 않는 속성을 인덱싱할 경우, 에러가 발생합니다.

type I1 = Person["alve"];
//Property 'alve' does not exist on type 'Person'.

임의의 타입으로 인덱싱하는 또 다른 예는 number를 사용하여 배열 요소들의 타입을 가져올 때입니다. 우리는 typeof와 함께 사용하여 객체 리터럴의 요소 타입들을 편리하게 잡아낼 수 있습니다.


const MyArray = [
  { name: "Alice", age: 15 },
  { name: "Bob", age: 23 },
  { name: "Eve", age: 38 },
];
 
type Person = typeof MyArray[number];
       //type Person = { name: string; age: number; }
type Age = typeof MyArray[number]["age"];
     //type Age = number
// Or
type Age2 = Person["age"];
      //type Age2 = number

타입은 인덱싱할 때만 사용할 수 있으며, const를 사용하여 변수를 참조할 수 없습니다.

const key = "age";
type Age = Person[key];

하지만 타입 별칭(type alias)를 사용하여 비슷하게 리팩토링이 가능합니다.

type key = "age";
type Age = Person[key];

참고자료
해당 내용은 타입스크립트 공식문서를 읽고 요약/해석한 내용입니다.
타입스크립트 공식문서 : Indexed Access Types

profile
더 도전하고 더 성장하자

0개의 댓글