重写typescript中的泛型方法

重写typescript中的泛型方法,typescript,Typescript,我试图创建一个基类AbstractQuery,并通过子类继承它,然后重写它的一些方法 类抽象查询{ public before(context:context,args:A,source?:S):Promise{ 返回承诺。解决(args); } } 现在我想在我的子类中重写上面的AbstractQuery::before方法: 类FindBookByIdQuery扩展了AbstractQuery{ public-before(context:context,args:arguments.ID

我试图创建一个基类
AbstractQuery
,并通过子类继承它,然后重写它的一些方法

类抽象查询{
public before(context:context,args:A,source?:S):Promise{
返回承诺。解决(args);
}
}
现在我想在我的子类中重写上面的
AbstractQuery::before
方法:

类FindBookByIdQuery扩展了AbstractQuery{
public-before(context:context,args:arguments.ID):Promise{
this.log.debug('hook before args',args);
返回承诺。解决(args);
}
}
但我得到了一个错误:

[ts] 类型“FindBookByIdQuery”中的“before”属性不可分配给基类型“AbstractQuery”中的同一属性。 类型'(上下文:上下文,args:ID)=>Promise'不可分配给类型'(上下文:上下文,args:A,源?:S)=>Promise'。 参数“context”和“context”的类型不兼容。 类型“Context”不可分配给类型“Context”。 类型“A”不可分配给类型“ID”。[2416]


TypeScript指出错误是正确的。在
AbstractQuery
中,
before
方法使用的上下文与其类型参数绑定。但是,在
FindBookByIdQuery
中不存在这种关系

如果要允许
之前的
具有可变行为,请重载其定义。考虑这个例子:

declare abstract class Foo<T> {
    before<U>(context: U): Promise<U>;
    before(context: T): Promise<T>
}

declare class Bar<T> extends Foo<T> {
    before(context: T): Promise<T>
}
声明抽象类Foo{
前(上下文:U):承诺;
前(上下文:T):承诺
}
声明类Bar扩展了Foo{
前(上下文:T):承诺
}

在这里,
之前的
可以是泛型(第一个重载)或依赖于其他类型。在这个例子中。另一个类型是类本身的类型参数。

谢谢您的回答。我的
AbstractQuery
类还有其他不需要重写的函数,所以它不能是纯
abstract
类!编译器并不是在抱怨变量行为,我猜,它是在抱怨“类型‘A’不可分配给类型‘ID’”“不知道如何解决这个问题?”?