假设我有这个代码:
class SuperElement extends Something {
render(subclassInstance: ???) {}
}
class MyElement extends SuperElement {
render({ sayHello }) {
sayHello('Foo');
}
sayHello(name: string);
}
有没有一种方法可以让我的IDE在render
中正确地自动完成(在MyElement
中)?
我试着使用(subclassInstance: this)
,但它不工作。
1条答案
按热度按时间nhn9ugyo1#
从概念上讲,您确实希望使用多态
this
类型来表示潜在子类的类型。这本质上是一个隐式的generic类型参数,它被约束到实现类,只有在以后作为方法调用时才被指定:不幸的是,当你在TypeScript中重写方法时,子类并不能从超类类型中推断出它的参数类型。你必须自己注解它们,然后它将根据超类方法参数类型进行 * 检查 * 以确保兼容性。这是TypeScript中一个长期存在的痛点;要求从父类继承参数类型的相关公开问题是microsoft/TypeScript#23911。除非实现了,否则,你只能这样做:
这不是很好,但至少可以捕获错误:
Playground链接到代码