본문 바로가기
강의 실습/한 입 크기로 잘라먹는 타입스크립트(TypeScript)

맵드 타입

by Jint 2024. 12. 10.

한 입 크기로 잘라먹는 타입스크립트 - 맵드 타입 (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; // 읽기전용이라 수정 불가



참고링크 : https://www.inflearn.com/course/%ED%95%9C%EC%9E%85-%ED%81%AC%EA%B8%B0-%ED%83%80%EC%9E%85%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8#

 

한 입 크기로 잘라먹는 타입스크립트(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

댓글