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]
}