TypeScript·

3 - Omit

  • #Type Challenges
  • #TypeScript

질문

T에서 K 프로퍼티만 제거해 새로운 오브젝트 타입을 만드는 내장 제네릭 Omit<T, K>를 이를 사용하지 않고 구현하세요.

예시:

1
interface Todo {
2
title: string
3
description: string
4
completed: boolean
5
}
6
7
type TodoPreview = MyOmit<Todo, 'description' | 'title'>
8
9
const todo: TodoPreview = {
10
completed: false,
11
}
12
13
43
title: string
44
}
45
46
interface Expected3 {
47
readonly title: string
48
}

선행 지식

  1. readonly의 보존

    TypeScript의 Mapped Type은 원본 프로퍼티의 를 자동으로 복사해줄 때가 있는데 원본 타입의 키를 그대로 기반으로 순회할 때 안정적으로 복사해준다. 만약 Exclude<keyof T, K>처럼 유니온을 한 번 가공한 결과로 순회할 경우 modifier의 복사가 깨질 수 있다.

  2. 키 재매핑 as

    타입 단언의 as와 다른 문법으로, Mapped Type에서 키를 다시 매핑하고 싶을 때 사용된다.

    1
    { [P in Keys as NewKey]: Value }

풀이