具有通用叶包装器的可重用模型特定树结构

时间:2017-09-03 17:14:26

标签: typescript generics types

如何定义一个可重用的树状类型来定义我独特的属性结构,但是允许为每个叶子参数化包装类型?

我有以下代码,代表我的应用程序在3个不同级别的状态:

export interface LogicTree {
  series: Logic<Series>,
  base: {
    ageGroup: Logic<AgeGroup>,
    woodSpecies: Logic<WoodSpecies>,
    length: Logic<Length>,
    profile: Logic<Profile>,
  }
}

export interface StorageTree {
  series: Storage<Series>,
  base: {
    ageGroup: Storage<AgeGroup>,
    woodSpecies: Storage<WoodSpecies>,
    length: Storage<Length>,
    profile: Storage<Profile>,
  }
}

export interface ResultTree {
  series: Series,
  base: {
    ageGroup: AgeGroup,
    woodSpecies: WoodSpecies,
    length: Length,
    profile: Profile,
  }
}

请注意,我在3种类型中都有相同的结构和类型变量用法。

为了简化更改和探索树之间的转换,我想只定义一次树结构,并为每个树应用不同的包装类型。但我没有这样做。

以下是我的尝试和我得到的错误:

1)

export interface AbstractTree<Wrapper> {
  series: Wrapper<Series>>,
  ...
}
  

Type&#39; Wrapper&#39;不是通用的。

2)

export interface AbstractTree<Wrapper<T>> {
  series: Wrapper<Series>>,
  ...
}
  

&#39;包装&#39;宣布但从未使用过。

     

&#39;,&#39;预期

     

找不到姓名&#39; T&#39;。

第3)

export interface AbstractTree<T, Wrapper<T extends BaseValue>> {
  series: Wrapper<Series>>,
  ...
}
  

&#39; T&#39;宣布但从未使用过。

     

找不到姓名&#39; T&#39;。

     

&#39; BaseValue&#39;仅指类型,但在此处用作值。

1 个答案:

答案 0 :(得分:0)

根据TypeScript#1213,目前无法实现。

也许你可以交换包装器的想法并将属性添加到如here描述的泛型类型中?

相关问题