[TypeScript] 맵드 타입

종현·2024년 1월 11일

[TypeScript]

목록 보기
19/19

맵드 타입(mapped type)이란?

  • 이미 정의된 타입을 가지고 새로운 타입을 생성할 때 사용하는 타입 문법

예시: in

  • in 키워드를 사용하여 유니언 타입으로 지정된 문자열들을 키로, boolean값을 속성 값으로 정의한다.

  • JS의 for...in 문법과 같이 유니언의 갯수만큰 반복문을 돌며 키와 속성값을 설정한다.

type Family = 'mom' | 'dad' | 'bro'

type FamilyAttendance = {
  [Name in Family]: boolean;
}
/**
*  type FamilyAttendance = {
*    mom: boolean;
*    dad: boolean;
*    bro: boolean;
*  }
*/

예시: Keyof

  • keyof는 특정 타입의 키 값만 모아 문자열 유니언 타입으로 변환해 주는 키워드이다.
interface Me {
  name: string;
  age: number;
}

// 아래의 두 타입은 주석으로 작성한 타입과 같은 의미이다.
type MyPropCheck = {
  [M in keyof Me]: boolean;
}

type MyPropCheck = {
  [M in 'name' | 'age']: boolean;
}

/**
*  type MyPropCheck = {
*    name: boolean;
*    age: boolean;
*  }
*/

// 아래의 두 타입은 같다.
type MyName1 = keyof My;
type MyName2 = 'name' | 'age';

매핑 수정자

  • 맵드 타입으로 타입을 변환할 때 속성 성질을 변환한 수 있도록 도와주는 문법이다.

  • 필수 속성 값을 옵션 속성 값으로 변환하거나 읽기 전용 속성을 내용을 변경할 수 있는 일반 속성으로 변환해준다.

  • 매핑 수정자는 +, -, ?, readonly 등이 있다.

type Me = {
  name: string; 
  age: number;
}

// ? 키워드를 이용하여 모두 옵셔널 처리할 수 있다.
type MeOptional = {
  [M in keyof Me]?: string;
}

/**
*  type MyOptional = {
*    name?: string;
*    age?: string;
*  }
*/

// -? 키워드를 사용하여 옵셔널 처리되었던 속성들을 필수값으로 변경한다.
type MeRequired<T> = {
  [M in keyof T]-?: T[M];
};

const me: MeRequired<MeOptional> = {
  name: 'jonghyun',
  age: '99'
} 

출처: 쉽게 시작하는 타입스크립트

profile
지속 가능한 성장 습관을 만들어 나가고 싶어요!

0개의 댓글