动态创建许多类型

时间:2019-02-07 21:49:58

标签: typescript

我目前在许多文件中都有这样的关系,我正在寻找一种创建组合函数的方法,以使这些函数之间的关系不易出现人为错误。

type XRaw = {};
type X = Merge<XRaw, {}>;
type XProto = Merge<X, {}>;
type XProtoPrepped = Merge<XProto, {}>;

类似这样的东西:

type [XRaw, X, XProto, XProtoPrepped] = Build<{}, {}, {}, {}>

我还想将{}限制为仅具有原始XRaw中的属性,并禁止输入无法识别的属性。

这可能吗?

2 个答案:

答案 0 :(得分:0)

  

我还想限制{}仅在原始XRaw中具有该属性,并禁止输入无法识别的属性。

想要exact类型的声音。

不幸的是TypeScript尚不支持确切的类型。这是TypeScript团队提出的相关问题:https://github.com/Microsoft/TypeScript/issues/12936

答案 1 :(得分:0)

interface Discover <Raw, RawOverrides, Proto, ProtoOverrides> {
  Raw: Raw;
  RawOverrides: Merge<Raw, RawOverrides>;
  Proto: Merge<Proto, Merge<Raw, RawOverrides>>;
  ProtoOverrides: Merge<ProtoOverrides, Merge<Proto, Merge<Raw, RawOverrides>>>;
}

type CatDiscover = Discover<{
  id: string;
}, {}, {}, {}>

type CatRaw = CatDiscover['Raw'];
type Cat = CatDiscover['RawOverrides'];
type CatProto = CatDiscover['Proto'];
type CatProtoPrepped = CatDiscover['ProtoOverrides'];