한 입 크기로 잘라먹는 타입스크립트 - 맵드 타입 (Mapped Type)
1. 맵드 타입
특정 객체 타입을 원하는데로 변환이 가능하기 때문에, 하나의 객체 타입으로 다양한 상황에 대처가 가능하다.
주의할 점은, 맵드 타입은 인터페이스에서는 쓸 수 없기 때문에 타입 별칭으로만 사용해야 한다.
활용도가 굉장히 높고 실무에서도 자주 쓰이는 타입이다.
- chapter2.ts
/**
* 맵드 타입
*/
interface User {
id: number;
name: string;
age: number;
}
// 한 명의 유저 정보를 불러오는 기능
function fetchUser(): User {
// ... 기능
return {
id: 1
, name: '송진성'
, age: 31
};
}
// 한 명의 유저 정보를 수정하는 기능
function updateUser(user: User) {
// ... 수정하는 기능
}
// 객체에서 바뀌지 않는 값도 다 넣어줘야 한다
updateUser({
id: 1
, name: '송진성'
, age: 32
});
// 해결책
// 중복 인터페이스 생성
interface PartialUser {
id?: number;
name?: string;
age?: number;
}
function updateUser2(user: PartialUser) {
// ... 수정하는 기능
}
updateUser2({
age: 32
});
// 맵드 타입 이용한 해결책
type PartialUser2 = {
// [key]: value
// [string 리터럴 타입]: value 의 타입
[key in 'id' | 'name' | 'age']?: User[key]; // 맵드 타입이 정의하는 모든 프로퍼티가 다 선택적 프로퍼티가 됨
};
// 맵드 타입 활용
type BooleanUser = {
[key in 'id' | 'name' | 'age']: boolean;
};
// 맵드 타입 + keyof 연산자 활용
type BooleanUser2 = {
[key in keyof User]: boolean; // key 를 P 와 같은 다른 변수로 바꿀 수 있다.
};
// 읽기전용 객체
type ReadonlyUser = {
readonly [key in keyof User]: User[key];
}
function fetchUser2(): ReadonlyUser {
// ... 기능
return {
id: 1
, name: '송진성'
, age: 31
};
}
const user = fetchUser2();
// user.id = 1; // 읽기전용이라 수정 불가
한 입 크기로 잘라먹는 타입스크립트(TypeScript) 강의 | 이정환 Winterlood - 인프런
이정환 Winterlood | 문법을 넘어 동작 원리와 개념 이해까지 배워도 배워도 헷갈리는 타입스크립트 이제 제대로 배워보세요! 여러분을 타입스크립트 마법사🧙🏻♀️로 만들어드립니다., 프론
www.inflearn.com
'강의 실습 > 한 입 크기로 잘라먹는 타입스크립트(TypeScript)' 카테고리의 다른 글
조건부 타입 소개 (0) | 2024.12.16 |
---|---|
템플릿 리터럴 타입 (0) | 2024.12.15 |
keyof 연산자 (0) | 2024.12.09 |
인덱스드 엑세스 타입 (0) | 2024.12.04 |
타입 조작하기 (0) | 2024.12.03 |
댓글