타입 조작하기

기본 타입이나 별칭 또는 인터페이스로 만든 기존에 존재하던 타입을 상황에 따라 다른 타입으로 변환하는 것

인덱스드 엑세스 타입

객체, 배열, 튜플 타입에서 특정 프로퍼티 혹은 요소의 타입을 추출하는 타입

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

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

const post: Post = {
  title: "게시물 제목",
  content: "게시글 본문",
  author: {
    id: 1,
    name: "신봄",
  },
};

const author: Post["author"]["id"]; // 속성이 있으므로 사용가능

Post["author"]를 통해 Post 인터페이스에서 필요한 타입만 추출할 수 있다.

배열타입에서 하나의 요소 타입만 가져올 경우 위와 같은 방법으로 가져올 수 있다.

튜플의 각 요소들도 인덱스트 엑세스 타입으로 추출이 가능하다.

주의할 점은 튜플 타입에 인덱스드 엑세스 타입을 사용할 때 인덱스에 number타입을 넣으면 마치 튜플을 배열처럼 인식하여 배열 요소의 타입을 추출하게 됨.

주의

index에 들어올 수 있는 건 오로지 type만 들어올 수 있음

Keyof 연산자

특정 객체 타입으로부터 프로퍼티 키들을 모두 스트링 리터럴 유니온 타입으로 추출하는 연산자

TypeOf와 KeyOf함께 사용하기

Mapped(맵드) 타입

기존의 객체 타입으로부터 새로운 객체 타입을 만드는 타입

필요한 속성만 프로퍼티로 보내고 싶을 때, interface를 별도로 생성하거나 하지 않을 수 있다.

맵드 타입은 인터페이스에서는 사용할 수 없다.

템플릿 리터럴 타입

스트링 리터럴 타입을 기반으로 정해진 패턴의 문자열만 포함하는 타입

Last updated