Javascript 重写typescript中继承类中的方法声明

Javascript 重写typescript中继承类中的方法声明,javascript,typescript,oop,Javascript,Typescript,Oop,假设我已经导入了这个javascript模块 A类{ 集合(k,v){ } } 我基于这个模块实现了我自己的类 从“模块”导入 B类扩展了A类{ 集合(k,o){ 超级组(k,o.v) //其他东西。。。 } } 这段代码工作得很好,但我将我的部分移植为typescript(我是typescript新手)。 幸运的是,我导入的模块有它的类型定义,比如 class A<T> { set(k: string, v: T): void; } 不知道如何改变该方法的参数。如何从ty

假设我已经导入了这个javascript模块

A类{
集合(k,v){
}
}
我基于这个模块实现了我自己的类

从“模块”导入
B类扩展了A类{
集合(k,o){
超级组(k,o.v)
//其他东西。。。
}
}
这段代码工作得很好,但我将我的部分移植为typescript(我是typescript新手)。 幸运的是,我导入的模块有它的类型定义,比如

class A<T> {
  set(k: string, v: T): void;
}

不知道如何改变该方法的参数。如何从typescript中的代码片段中获得有效的javascript?

typescript指出,
B
实际上不能替代
A
,因为
B#set
A#set
不兼容。要使
B
替代
A
,您需要允许某人使用
T1
调用
set

class B extends A<T1> {
  set(k: string, o: T1 | T2): void {
    if (o instanceof T2) {
      super.set(k, o.v); // Our new overload
    } else {
      super.set(k, o);  // The contract that A<T1> *must* support.
    }
  }
}
B类扩展了A类{
集合(k:string,o:T1 | T2):无效{
if(T2的o实例){
super.set(k,o.v);//我们的新重载
}否则{
super.set(k,o);//A*必须*支持的契约。
}
}
}

我不知道TypeScript是否有办法强迫它接受,但无论如何,你不应该用不兼容的签名覆盖一个方法,因为你已经说过任何
B
都是
a
,所以接受
a
的函数应该能够调用
.set(k,o)
在带有
o
的对象上,这是
T1
,而不是
T2
Type '(k: string, v: T2) => void' is not assignable to type '(k: string, value: T1): void;'
class B extends A<T1> {
  set(k: string, o: T1 | T2): void {
    if (o instanceof T2) {
      super.set(k, o.v); // Our new overload
    } else {
      super.set(k, o);  // The contract that A<T1> *must* support.
    }
  }
}