跳到主要内容

实现 Omit

实现一个内置泛型 Omit<T,K> 它的功能是从 T 中删除 K 包括的元素,最后将结果以对象的形式返回

interface Todo {
title: string
description: string
completed: boolean
}

type TodoPreview = MyOmit<Todo, 'description' | 'title'>

const todo: TodoPreview = {
completed: false,
}

简单实现一个 Pick

type Pick<T, U extends keyof T> = {
[P in U]: T[P]
}

然后实现一个 Exclude

// T 如果是 U 的子类型,返回 never 否则返回 T
type Exclude<T,U> = T extends U ? never : T

然后结合上述两种方式,进行组合实现 Omit

type Omit<T, K> = Pick<T, Exclude<keyof T, K>>