注:该
underlying issue
他被分开问。这是提供的解决方案的后续行动。
Typescript允许通过2.8创建一个省略类型
Exclude
.
我想在一个旧的代码库中使用Omit in,使用typescript@2.3.
在…上
this blog
显示了一个实现,它是:
type Diff<T extends string, U extends string> = ({[P in T]: P } & {[P in U]: never } & { [x: string]: never })[T];
type Omit<T, K extends keyof T> = Pick<T, Diff<keyof T, K>>;
然而,这一点在我看来很奇怪,比如:
inteface MyTarget {
a: string;
b: string;
c: string;
}
type MyPartial = Omit<MyTarget, "a" | "b">;
const foo: MyPartial = {
c: "foo",
};
我会抱怨我的
foo
缺少属性:
src/helper/types/Omit.ts(12,7): error TS2322: Type '{ c: string; }' is not assignable to type 'Pick<MyTarget, "a" | "b" | "c">'.
Property 'a' is missing in type '{ c: string; }'.
然而,整个想法是生成一个缺少特定字段的类型。
如何创建一个合适的
Omit
键入TypeScript而不升级到更新的TypeScript版本?