[英]Override method declaration in inherited class in typescript
假设我已经导入了这个 javascript 模块
class A {
set (k, v) {
}
}
我基于那个模块实现了我自己的类
import A from 'module'
class B extends A {
set (k, o) {
super.set(k, o.v)
// other stuff...
}
}
这段代码工作正常,但我将我的部分移植为打字稿(我是打字稿的新手)。 幸运的是,我导入的模块有它的类型定义,比如
class A<T> {
set(k: string, v: T): void;
}
我正在像这样实施它
class T2 {
v: T1;
}
class B extends A<T1> {
set(k: string, o: T2): void {
super.set(k, o.v)
}
}
但是打字稿似乎不喜欢这样。 我不断收到此错误
Type '(k: string, v: T2) => void' is not assignable to type '(k: string, value: T1): void;'
不确定如何改变该方法的参数。 如何从打字稿中的代码段获得有效的 javascript?
TypeScript 指出B
实际上不能替代A<T1>
因为B#set
与A#set
不兼容。 要使B
替代A<T1>
您需要允许某人使用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.
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.