簡體   English   中英

如何修復“TS2769:沒有過載匹配此調用”

[英]How to repair a 'TS2769: No overload matches this call'

package更新后,突然出現奇怪的typescript錯誤:

[tsl] C 中的錯誤:..\UI\src\sagas.ts(40,21) TS2769:沒有與此調用匹配的重載。

最后一個重載給出了以下錯誤。 “LOAD_IDS”類型的參數不可分配給“TakeableChannel”類型的參數。

sagas.ts對應的第39-41行是

function* watchIds() {
    yield takeEvery(Actions.LOAD_IDS, loadIds);
}

function function* loadIds({ forceReload })在同一個sagas.ts中定義,並且只是 API 調用。

TS 錯誤是什么意思,我該如何解決?

  1. 我的packages.json看起來像這樣: https://pastebin.com/raw/nJ0cPNXb

  2. 也許也很重要:我的webpack.config.jshttps://pastebin.com/raw/JNdXTCMb

參考

我也遇到了這個問題,但是我問了我的同事,了解了以下解決方案:

redux-saga 采用TakeableChannel<unknown> 這是一個動作,所以你聲明 loadIds 的參數類型是這樣的動作形狀:

function* loadIds({
   forceReload
}: { 
   type: string;
   forceReload: any; // your forceReload type
}) {
   // your code
}

我的同事最終教了我一個解決方法:

  1. 從原始import語句中排除相應的操作,例如takeEvery
  2. 使用as Eff導入所有操作,其中Eff是別名。
  3. 定義一個與原始動作同名的新常量。
import { put, fork, select, call } from 'redux-saga/effects' // <-- modified
import * as Eff from 'redux-saga/effects'  // <-- new

// ... 

const takeEvery: any = Eff.takeEvery;      // <-- new
const takeLatest: any = Eff.takeLatest;    // <-- new

據我了解他,這個想法是明確允許any類型。

Edit: I am aware that Facebook (as developer of React) does explicitly state that one should not use inheritance, see https://reactjs.org/docs/composition-vs-inheritance.html

我可以通過兩次轉換variableThatRaisesIssue來解決這樣的問題:

variableThatRaisesIssue as unknown as any

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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