in 키워드를 사용하여 유니언 타입으로 지정된 문자열들을 키로, boolean값을 속성 값으로 정의한다.
JS의 for...in 문법과 같이 유니언의 갯수만큰 반복문을 돌며 키와 속성값을 설정한다.
type Family = 'mom' | 'dad' | 'bro'
type FamilyAttendance = {
[Name in Family]: boolean;
}
/**
* type FamilyAttendance = {
* mom: boolean;
* dad: boolean;
* bro: boolean;
* }
*/
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'
}
출처: 쉽게 시작하는 타입스크립트