代码之家  ›  专栏  ›  技术社区  ›  k0pernikus

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

  •  1
  • k0pernikus  · 技术社区  · 6 年前

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

    0 回复  |  直到 6 年前