我有这堂课:
class Container {
parent: any;
children: any[];
}
我想删除'any'类型,这可以通过泛型来完成。我遇到的问题是'any'类型也不属于'Container'类型,这需要再次指定泛型类型。
class Container<P extends Container<?>, C extends Container<?>> {
parent: P;
children: C[];
}
如何判断约束是否为同一类类型?
答案 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;
编辑器中的语法检查在这里正确地解决了最后所有值的类型。