如何在TypeScript中使基本泛型类型知道子类通用?

时间:2014-07-28 08:15:05

标签: javascript generics interface typescript

有没有办法在基础类型中生成两个泛型类型,还可以使其中一个包含第二个泛型类型?

这是我的代码:

interface ITreeNode extends IBaseNode{
}

interface IBaseTree<T extends IBaseNode> {
    nodeType: T
}

interface IBaseForest <T extends IBaseTree<T2 extends IBaseNode>> {
    treeType: T
    nodeType: T2 
}

问题是'T2扩展IBaseNode',我真的不能设置另一种类型,理论上我不需要,因为baseTree知道他的节点的类型,我不能让森林了解谁是这个节点。< / p>

如果我不能理解,我很抱歉,谢谢你的任何回复。

1 个答案:

答案 0 :(得分:1)

我简化了一下。

  • 删除了IBaseNode,因为它没有被声明,与我们的问题无关。将ITreeNode视为您的基本节点
  • 使用通用的placholder名称来匹配意图(例如,词典中的K,V)。这里的意图是NodeNTreeT

以下是我想要的想法

interface ITreeNode{}

interface IBaseTree<N extends ITreeNode> {
    nodeType: N;
}

interface IBaseForest<N extends ITreeNode,T> {
    treeType: T;
    nodeType: N;
}

但是,如果你想基于T禁止N,那么由于下面的限制,你也不能使用{{1}}:

enter image description here

根据规格。