如何修复“TS2769:没有匹配此调用的重载”错误

21

更新软件包后,我突然出现了奇怪的 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* loadIds({ forceReload })函数在同一sagas.ts中定义,仅仅是API调用。

TS错误的含义以及如何修复它?

  1. 我的packages.json 文件长这样:https://pastebin.com/raw/nJ0cPNXb

  2. 也许还重要的是:我的webpack.config.js 是:https://pastebin.com/raw/JNdXTCMb

参考资料

4个回答

5

我也遇到了这个问题,但我向同事请教后了解到以下解决方案:

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

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

3

我的同事最终教会了我一个解决方法:

  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

据我理解,这个想法是明确允许使用任何类型。
编辑:我知道Facebook(作为React的开发者)明确表示不应该使用继承,请参阅https://reactjs.org/docs/composition-vs-inheritance.html

组合与继承适用于React组件,而不是项目中的所有代码。 - Slbox

0
在寻找关于yield调用类似问题的解决方案。
不喜欢使用任何...以下是适用于我的有效代码:
yield call<typeof myFunction>(myFunction, {
    type: 'path',
    payload: {
        year: 2023
    }
})

注意:如果你不知道类型的值,Visual Studio的纠正器会告诉你期望的是什么。根据我所了解的,我相信它是“切片名称/减少器”。

-2

我可以通过两次转换variableThatRaisesIssue来解决这个问题:

variableThatRaisesIssue as unknown as any

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接