簡體   English   中英

覆蓋打字稿中繼承類中的方法聲明

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM