注意:underlying issue是另外询问的。这是所提供解决方案的后续措施。
Typescript允许通过Exclude
创建一个从2.8开始的省略类型。
我想在使用typescript@2.3的旧代码库中使用Omit。
在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; }'.
但是整个想法是生成一种缺少某些字段的类型。
如何在TypeScript中创建适当的Omit
类型而不升级到最新的Typescript版本?