[英]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.