TypeScript-섹션8. 타입 조작하기-인덱스드 엑세스 타입(1)

손주완·2025년 7월 15일

Typescript Section8

목록 보기
2/5

선요약

  • 인덱스드 엑세스 타입은 객체, 배열, 튜플에서 특정 속성의 타입을 추출할 때 사용함.
  • 문법은 타입명["프로퍼티명"] 또는 타입명[숫자] 형태로 사용함.
  • 객체 속성 변경 시 매개변수 타입도 자동 반영 가능함.
  • 유효하지 않은 인덱스 사용 시 오류 발생함.
  • 배열/튜플의 요소 타입을 추출하여 재사용하거나 제네릭화할 수 있음.

인덱스드 엑세스 타입

인덱스드 엑세스 타입은 인덱스를 이용해 다른 타입내의 특정 프로퍼티의 타입을 추출하는 타입임. 객체, 배열, 튜플에 모두 사용할 수 있음.

객체 프로퍼티의 타입 추출

interface Post {
  title: string;
  content: string;
  author: {
    id: number;
    name: string;
    age: number;
  };
}

function printAuthorInfo(author: Post["author"]) {
  console.log(`${author.id} - ${author.name}`);
}
  • Post["author"]Post 타입에서 author 프로퍼티의 타입을 추출함.
  • 인덱스는 문자열 리터럴 타입만 가능하며, 변수 사용은 불가함.
const authorKey = "author";
function printAuthorInfo(author: Post[authorKey]) { // ❌ 오류 발생
  console.log(`${author.id} - ${author.name}`);
}
  • 존재하지 않는 프로퍼티에 접근하려고 하면 오류 발생함.

중첩 접근도 가능함.

function printAuthorInfo(authorId: Post["author"]["id"]) {
  console.log(authorId);
}

배열 요소 타입 추출

type PostList = Post[];
const post: PostList[number] = {
  title: "게시글 제목",
  content: "게시글 본문",
  author: {
    id: 1,
    name: "이정환",
    age: 27,
  },
};
  • PostList[number]는 배열의 요소 타입을 추출함.
  • PostList[0]처럼 숫자 리터럴을 써도 동일하게 동작함.

튜플의 요소 타입 추출

type Tup = [number, string, boolean];

type Tup0 = Tup[0]; // number
type Tup1 = Tup[1]; // string
type Tup2 = Tup[2]; // boolean
type Tup3 = Tup[number]; // number | string | boolean
  • 튜플에 number 인덱스를 넣으면 모든 요소의 유니온 타입이 추출됨.

요약

  • 인덱스드 엑세스 타입은 객체나 배열/튜플에서 타입을 추출하여 재사용할 때 유용함.
  • 중복 정의를 피하고 타입 변화에 유연하게 대응할 수 있음.
  • 배열 요소 타입은 [number], 튜플은 [숫자] 또는 [number]로 유니온 처리됨.

0개의 댓글