外观
Omit
题目
Github: Omit
不使用 Omit 实现 TypeScript 的 Omit<T, K> 泛型。
Omit 会创建一个省略 K 中字段的 T 对象。
interface Todo {
title: string
description: string
completed: boolean
}
type TodoPreview = MyOmit<Todo, 'description' | 'title'>
const todo: TodoPreview = {
completed: false,
}解题思路
首先需要通过 K extends keyof T 约束K 只包含 类型 T 的键。 然后使用内置类型 Exclude 帮助我们从 keyof T 中排除 K 的键。 最后新对象的值为 原类型的相对应键的值类型
答案
type MyOmit<T, K extends keyof T> = {
[P in Exclude<keyof T, K>]: T[P]
}