实现 Omit

不使用 Omit 实现 TypeScriptOmit<T, K> 泛型。

Omit 会创建一个省略 K 中字段的 T 对象。

例如:

1
2
3
4
5
6
7
8
9
10
11
12

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

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

const todo: TodoPreview = {
completed: false,
}

解答

1
2
3
4
5
6
7
8
9
10
11
12
13
interface Todo {
title: string;
description: string;
completed: boolean;
}

type MyOmit<T, K extends keyof T> = {
[P in keyof T as P extends K ? never : P]: T[P];
};

// @ts-expect-error
type error = MyOmit<Todo, "description" | "invalid">;