Reactjs “雷杜传奇”;调用;未正确键入saga参数的影响

Reactjs “雷杜传奇”;调用;未正确键入saga参数的影响,reactjs,typescript,redux-saga,Reactjs,Typescript,Redux Saga,我有一个传奇故事的定义如下: type-GenericFunction=(…args:any[])=>any; 接口IFetchSaga{ 佐贺:T, args:参数 } 函数*triggerChange(fetchSaga:IFetchSaga,shouldFetch:boolean){ //…做事 if(shouldFetch){ 收益调用(fetchSaga.saga,…fetchSaga.args); } //…做事 } 当我尝试在另一个传奇中使用此传奇时,使用调用效果,我没有得到I

我有一个传奇故事的定义如下:

type-GenericFunction=(…args:any[])=>any;
接口IFetchSaga{
佐贺:T,
args:参数
}
函数*triggerChange(fetchSaga:IFetchSaga,shouldFetch:boolean){
//…做事
if(shouldFetch){
收益调用(fetchSaga.saga,…fetchSaga.args);
}
//…做事
}

当我尝试在另一个传奇中使用此传奇时,使用
调用
效果,我没有得到
IFetchSaga
参数的正确键入:

function*fetchData(id:number,date:string){
//…一定要去拿
}
函数*load(){
//…做事
收益率调用(触发器更改{
传奇:获取数据,
args:['10','2021-03-22']//我没有收到一个错误,说'10'应该是一个数字
},
真的
);
}
例如,当我尝试直接执行它时(就好像它是任何其他函数一样),类型正确:

triggerChange({
传奇:获取数据,
args:['10','2021-03-22']//这里我得到一个错误,说'10'应该是一个数字
});
在调用我的传奇时,我能做些什么让args正确键入?
注:我知道我可以在调用效果之外定义我的
fetchSaga
参数,但是我必须始终使用
类型的
调用
IFetchSaga
(我希望避免):

function*fetchData(id:number,date:string){
//…一定要去拿
}
函数*load(){
//…做事
//这会起作用,但我想避免不得不这样做
我的建议是通过helper函数创建
IFetchSaga
对象

function fetchable<T extends GenericFunction>( saga: T, ...args: Parameters<T>): IFetchSaga<T> {
  return {saga, args};
}

问题 原始版本失败的原因与我深入讨论的地方类似。
triggerChange
是一个通用函数,可以用任何
T
调用。当我们为
triggerChange
创建
call
效果时,它不需要有任何特定的
T
类型,因为
T
是d在调用函数时确定。参数的类型返回到仅
GenericFunction
,其中
args
any[]
,因此将数组分配给它没有问题

我们的解决方案之所以有效,是因为我们通过直接调用
fetchable
来推断特定的
T
。给我们错误的是
fetchable
函数,而不是
调用
。如果我们声明
fetchable
T
只是
GenericFunction
,那么我们也会遇到同样的问题和以前一样

// no errors, even though we want them
yield call(triggerChange, fetchable<GenericFunction>(fetchData, "10", "2021-03-22"), true);
//没有错误,即使我们需要它们
收益率调用(triggerChange,可获取(fetchData,“10”,“2021-03-22”),真);
// no errors, even though we want them
yield call(triggerChange, fetchable<GenericFunction>(fetchData, "10", "2021-03-22"), true);