T에서 K 프로퍼티만 제거해 새로운 오브젝트 타입을 만드는 내장 제네릭 Omit<T, K>를 이를 사용하지 않고 구현하세요.
interface Todo {
title: string
description: string
completed: boolean
}
type TodoPreview = MyOmit<Todo, 'description' | 'title'>
const todo: TodoPreview = {
completed: false,
}
같은 솔루션이지만 다양한 코드를 써놓겠습니다.
만들 제네릭은 2개의 타입변수를 받는다. 객체 타입과 그 객체타입의 키에 해당하는 것들인 유니온,
type MyOmit<T, U extends keyof T> = ??
그리고 T의 키 값들 중에서 U의 값을 Exclude하여 나온 만큼 반환
type MyOmit<T, U extends keyof T> = {[t in Exclude<keyof T, U>]: T[t]}
첫 번 째와 마찬가지로 타입변수를 받는다.
type MyOmit<T, U extends keyof T> = ??
as를 이용하여 타입을 매핑시킬것이다.
type MyOmit2<T, U extends keyof T> = { [t in keyof T as Exclude<t, U>]: T[t] };
조건부를 이용하여 U에 해당한다면 never를 아니라면 t를 반환
type MyOmit3<T, U extends keyof T> = {
[t in keyof T as t extends U ? never : t]: T[t];
};