[TS] 인덱스드 액세스 타입

TIL

인덱스드 액세스 타입(Indexed Access Type)은 객체, 배열, 튜플 타입으로부터 특정 프로퍼티나 요소의 타입만 추출하는 타입이다.

객체 프로퍼티 타입 추출

게시글 작성자 정보를 출력하는 함수를 작성해보자.

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

function printAuthorInfo(author: { id: number; name: string }) {
  console.log(`${author.name}-${author.id}`);
}

 

만약 Post의 author 타입이 수정되면 함수의 매개변수 타입도 함께 수정해야 한다.

인덱스드 액세스 타입을 사용하면 이 문제를 해결할 수 있다.

function printAuthorInfo(author: Post["author"]) {
  console.log(`${author.name}-${author.id}`);
}

대괄호 안의 "author"를 인덱스라고 부른다. 이제 Post의 author 타입이 변경되면 자동으로 반영된다.

 

중첩 인덱스

인덱스를 중첩하여 더 깊은 프로퍼티의 타입을 추출할 수 있다.

function printAuthorId(id: Post["author"]["id"]) {
  // id의 타입은 number
  console.log(id);
}

 

주의사항

인덱스에는 타입만 들어갈 수 있다. 값은 사용할 수 없다.

존재하지 않는 프로퍼티 이름도 오류가 발생하다.

 

배열 요소 타입 추출

배열의 요소 타입을 추출할 때는 인덱스에 number타입을 사용한다.

type PostList = {
  title: string;
  content: string;
  author: {
    id: number;
    name: string;
    age: number;
  };
}[];

const post: PostList[number] = {
  title: "게시글 제목",
  content: "게시글 본문",
  author: {
    id: 1,
    name: "woodstock",
    age: 100,
  },
};

function printAuthorInfo(author: PostList[number]["author"]) {
  console.log(`${author.name}-${author.id}`);
}

 

Number Literal 타입(0, 1 등)을 넣어도 number 타입과 동일하게 동작한다.

 

변수를 넣으면 오류가 발생한다. 타입이 아닌 값이기 때문이다.

 

튜플 요소 타입 추출

튜플의 각 요소 타입을 개별적으로 추출할 수 있다.

type Tup = [number, string, boolean];

type Tup0 = Tup[0]; // number
type Tup1 = Tup[1]; // string
type Tup2 = Tup[2]; // boolean

 

number 타입을 인덱스로 사용하면 모든 요소 타입의 유니언을 반환한다.

type Tup3 = Tup[number]; // number | string | boolean

'TIL' 카테고리의 다른 글

[TS] 맵드 타입  (0) 2025.11.05
[TS] keyof와 typeof 연산자  (0) 2025.11.05
[CS50] 컴퓨팅 사고 - 알고리즘  (0) 2025.11.05
[CS50] 컴퓨팅 사고 - 정보의 표현  (0) 2025.11.04
[TS] 제네릭 함수 타입 정의 및 응용 연습  (0) 2025.11.04
'TIL' 카테고리의 다른 글
  • [TS] 맵드 타입
  • [TS] keyof와 typeof 연산자
  • [CS50] 컴퓨팅 사고 - 알고리즘
  • [CS50] 컴퓨팅 사고 - 정보의 표현
고견
고견
개발 자국 남기기
  • 고견
    개발자국
    고견
  • 전체
    오늘
    어제
    • 분류 전체보기 (157) N
      • Frontend (29)
        • Next.js (16)
        • JavaScript (7)
      • CS (19) N
        • 자료구조 (9)
        • 알고리즘 (5)
        • 운영체제 (4) N
        • 네트워크 (1) N
      • TIL (93)
      • Dev Log (16)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    C
    react
    제네릭
    cs50
    Next.js
    문자열
    자료구조
    algorithm
    클래스
    typescript
    generic
    Pages Router
    바닐라 자바스크립트
    인터페이스
    emotion diary
    배열
    트러블 슈팅
    useState
    App Router
    페이지 라우터
    Trouble Shooting
    javascript
    타입 좁히기
    Spa
    memory
    함수 타입
    알고리즘
    CS
    앱 라우터
    ai 감성 일기장
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
고견
[TS] 인덱스드 액세스 타입
상단으로

티스토리툴바