相同类型的通用约束

时间:2017-07-12 14:49:20

标签: typescript

我有这堂课:

class Container {
    parent: any;
    children: any[];
}

我想删除'any'类型,这可以通过泛型来完成。我遇到的问题是'any'类型也不属于'Container'类型,这需要再次指定泛型类型。

class Container<P extends Container<?>, C extends Container<?>> {
    parent: P;
    children: C[];
}

如何判断约束是否为同一类类型?

2 个答案:

答案 0 :(得分:1)

我不知道您的用例究竟是什么样的,但是这个简单版本的课程怎么样?

class Container<T> {
    parent: Container<T>;
    children: Container<T>[];
}

答案 1 :(得分:1)

我认为这就足以说明P extends Container<any,any>C extends Container<any,any>

class Container<P extends Container<any,any>,C extends Container<any,any> >{
    parent: P;
    children: C[];
}

class Parent extends Container<Parent,Child> {
  name: string;
}

class Child extends Container<Parent, Child> {
  childname: string;
}

const root = new Parent();
root.parent;
root.children[0].parent;
root.name;
root.children[0].childname;

编辑器中的语法检查在这里正确地解决了最后所有值的类型。