如何修复“ TS2769:此呼叫无过载”

时间:2019-10-22 11:01:40

标签: javascript reactjs typescript webpack

更新软件包后,我突然收到奇怪的打字稿错误:

  

[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* loadIds({ forceReload })是在同一sagas.ts中定义的,只是API调用。

TS错误是什么意思,我该如何解决?

  1. 我的packages.json如下:https://pastebin.com/raw/nJ0cPNXb

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

参考文献

2 个答案:

答案 0 :(得分:3)

我也遇到了这个问题,但是我问了我的同事并了解了以下解决方案:

redux-saga需要TakeableChannel<unknown>。这是一个动作,因此您声明loadIds的参数类型为如下所示的动作形状:

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

答案 1 :(得分:-1)

我的同事最终教我一种解决方法:

  1. 排除相应的动作,例如takeEvery来自原始import语句。
  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类型。