Indexed Access Types

타입의 특정 프로퍼티를 찾기 위해서 인덱싱된 접근 타입 을 사용할 수 있습니다.

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

인덱싱된 타입은 그 자체로도 타입이라서 유니언, keyof 혹은 타입 전체에 사용할 수 있습니다.

ts
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
Try

존재하지 않는 프로퍼티를 인덱싱하려고 하면 오류가 발생합니다.

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

또 다른 예로는 임의의 타입을 number로 인덱싱해서 배열 요소의 타입을 가져올 수 있습니다. typeof와 결합하면 편리하게 배열 리터럴의 요소 타입을 캡쳐할 수 있습니다.

ts
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
Try

인덱싱할 때 변수 참조를 위해 사용된 const는 사용할 수 없고, 오로지 타입만 사용 가능합니다.

ts
const key = "age";
type Age = Person[key];
Type 'key' cannot be used as an index type.
'key' refers to a value, but is being used as a type here. Did you mean 'typeof key'?
2538
2749
Type 'key' cannot be used as an index type.
'key' refers to a value, but is being used as a type here. Did you mean 'typeof key'?
Try

하지만, 비슷한 스타일의 리팩터로 타입 별칭을 사용할 수 있습니다.

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

The TypeScript docs are an open source project. Help us improve these pages by sending a Pull Request

Contributors to this page:
  (6)

Last updated: 2023년 1월 30일