更新软件包后,我突然收到奇怪的打字稿错误:
[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错误是什么意思,我该如何解决?
我的packages.json
如下:https://pastebin.com/raw/nJ0cPNXb
也许也很重要:我的webpack.config.js
是https://pastebin.com/raw/JNdXTCMb
答案 0 :(得分:3)
我也遇到了这个问题,但是我问了我的同事并了解了以下解决方案:
redux-saga需要TakeableChannel<unknown>
。这是一个动作,因此您声明loadIds的参数类型为如下所示的动作形状:
function* loadIds({
forceReload
}: {
type: string;
forceReload: any; // your forceReload type
}) {
// your code
}
答案 1 :(得分:-1)
我的同事最终教我一种解决方法:
takeEvery
来自原始import
语句。as Eff
导入所有操作,其中Eff
是别名。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
类型。