如何为tsc@2.3创建省略类型?

时间:2019-02-05 13:28:33

标签: typescript

注意: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版本?

0 个答案:

没有答案