有没有一种方法可以在一个基础类型中创建两个泛型类型,同时让其中一个包含第二个作为泛型?
这是我的代码:
interface ITreeNode extends IBaseNode{
}
interface IBaseTree<T extends IBaseNode> {
nodeType: T
}
interface IBaseForest <T extends IBaseTree<T2 extends IBaseNode>> {
treeType: T
nodeType: T2
}
问题是'T2 extends IBaseNode',我真的不能设置另一种类型,理论上我不需要,因为baseTree知道他的节点的类型,我无法让森林知道这个节点是谁。
如果我无法理解,我很抱歉,感谢您的任何回复。
最佳答案
我简化了一点。
- 删除了
IBaseNode
,因为它没有声明并且与我们的问题无关。将ITreeNode
视为您的基本节点 - 使用通用的占位符名称来匹配意图(例如字典中的
K,V
)。这里的意图是Node
:N
和Tree
:T
所以下面的代码可以满足我认为的需求:
interface ITreeNode{}
interface IBaseTree<N extends ITreeNode> {
nodeType: N;
}
interface IBaseForest<N extends ITreeNode,T> {
treeType: T;
nodeType: N;
}
但是,如果你想基于 N
来限制 T
,你不能这样做,因为下面显示的限制:
这是根据规范。
关于javascript - 如何让基本泛型类型知道 TypeScript 中的子泛型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24991005/