给定以下内容(操场链接):
abstract class Base<F extends () => void> {
public abstract __call__: F;
}
type CallSignature<T> = {
(): T;
(value: T): void;
}
class Foo<T> extends Base<CallSignature<T>> {
public __call__(): T;
public __call__(value: T) : void;
public __call__(value?: T) {
return value;
}
}
我得到这个错误:
Class 'Base<CallSignature<T>>' defines instance member property '__call__', but extended class 'Foo<T>' defines it as instance member function.(2425)
我如何指定Base
中的__call__
是一个方法,同时仍然让它的定义来自T
(例如,允许任意签名,包括重载)?
请注意,Base
不允许直接引用CallSignature
,因为对于不同的子类,这将是不同的接口(因此它作为F
传递)。
此外,这个问题的要点是Base
应该负责Foo
需要实现什么接口,即使Foo传递了一个以某种方式定制它的泛型。
1条答案
按热度按时间ljo96ir51#
您可以使用
Parameters
和ReturnType
帮助器重新创建__call__
方法的类型,而不是引用它的类型。