keyof和Lookup Types对的并集类型

时间:2018-07-14 18:47:21

标签: typescript union-types keyof

从这些类型的

type I1 = {
  a: number;
  b: boolean;
};

type I2 = {
  x: string;
  y: number;
};

我想要获得以下类型:

type O1 =
  | {
      name: "a";
      value: number;
    }
  | {
      name: "b";
      value: boolean;
    };

type O2 =
  | {
      name: "x";
      value: string;
    }
  | {
      name: "y";
      value: number;
    };

如何定义X以便我可以做到:

type O1 = X<I1>;
type O2 = X<I2>;

1 个答案:

答案 0 :(得分:1)

发现了这种黑客行为(通过@Titian的comment进行了改进):

type X<I> ={ [k in keyof I]: { name: k; value: I[k]; } }[keyof I];