以下 * createAsyncThunk * 方法有问题
export const fetchPatientByDocument = createAsyncThunk<
Patient,
string,
{ state: { patient: { loading: string; CurrentRequestId: string } } }
>(
'patient/fetchByDocument',
async (patientdocument: string, { getState, requestId }) => {
const { CurrentRequestId, loading } = getState().patient;
if (loading !== 'pending' || requestId !== CurrentRequestId) {
return;
}
const RequestURL: string =
PatientBaseUrl + 'Pacientes/3/' + patientdocument;
const response = await fetch(RequestURL).then((data) => data.json());
return response;
}
);
这里没有问题,但是当我试图从登录页面调度这个函数时,
const handlerButtonclick = () => {
const { loading, CurrentRequestId } = CurrentPatient;
if (patientDocument) {
const fetchPatient = async (patientDocument: string) => {
try {
const patient = await dispatch(
fetchPatientByDocument(patientDocument)
);
} catch (e) {
throw e;
}
};
}
// navigate(patientDocument + '/verification');
};
我得到这个错误
没有与此调用匹配的重载。重载3个中的第1个,'(thunkAction:ThunkAction〈承诺〈有效负载Action〈患者,字符串,{参数: 字符串;请求ID: 字符串;请求状态: "已履行"; },从不〉| 有效负载操作〈未知,字符串,{arg:字符串;请求ID: 字符串;请求状态: "拒绝"; 已中止:布尔值;条件:布尔型;}&({...;}|({...;}&{})),序列化错误〉〉&{...;}、组合状态、未定义、任何操作〉):<...>承诺&{...;}",出现以下错误。类型为" AsyncThunkAction〈Patient,string,{state:{患者:{加载:<...>字符串;当前请求ID:字符串;};派遣?:派遣未定义的;额外的?:未知;拒绝值?:未知;序列化错误类型?:|未知;待定Meta?:未知;已完成Meta?:未知;拒收Meta?:未知;}〉"不能赋值给类型为" ThunkAction〈Promise〈PayloadAction〈Patient,字符串,{arg:字符串;请求ID:字符串;请求状态:"已履行";},从不〉有效负载操作〈未知,字符串,{arg:字符串;请求ID:字符串;请求状态:|"拒绝";已中止:布尔值;条件:布尔型;}&({...;}({...;}&{})),序列化错误〉〉&{...;}..."。参数" getState "和" getState "的类型不兼容。调用签名返回类型" CombinedState〈{router:路由器状态;患者:患者状态;|}〉"和" {患者:{加载:字符串;当前请求ID:string ;};}"不兼容。" patient.CurrentRequestId "的类型在这些类型之间不兼容。请键入" string"undefined"不能赋值给类型"string"。类型"undefined"不能赋值给类型"string"。重载3之2,"(操作:任何操作):AnyAction ",给出了以下错误。类型为" AsyncThunkAction〈Patient,string,{state:{患者:{加载:|字符串;当前请求ID:字符串;};派遣?:派遣未定义的;额外的?:未知;拒绝值?:未知;序列化错误类型?:未知;待定Meta?:未知;已完成Meta?:|未知;拒收Meta?:"未知;}〉"不能赋给类型"AnyAction"的参数。类型"AsyncThunkAction〈Patient,string,{state:{患者:{加载:字符串;当前请求ID:字符串;};派遣?:派遣未定义的;额外的?:未知;拒绝值?:未知;序列化错误类型?:未知;待定Meta?:未知;已完成Meta?:未知;拒收Meta?:|未知;}〉",但在类型" AnyAction "中是必需的。重载3个中的第3个,"(操作:任何操作ThunkAction〈承诺〈有效负载Action〈患者,字符串,{参数:字符串;请求ID:字符串;请求状态:"已履行";},从不〉有效负载操作〈未知,字符串,{...;|}&({...;}({...;}&{})),序列化错误〉〉&{...;}、组合状态、未定义、任何操作〉):任何操作|(Promise &{...;})',出现以下错误。类型为' AsyncThunkAction〈Patient,string,{state:{患者:{加载:字符串;当前请求ID:|字符串;};派遣?:派遣<...>未定义的;额外的?:未知;拒绝值?:|未知;序列化错误类型?:<...>未知;待定Meta?:未知;已完成Meta?:未知;拒收Meta?:未知;}〉"不能赋给" AnyAction "类型的参数ThunkAction〈承诺〈有效负载Action〈患者,字符串,{参数:字符串;请求ID:|字符串;请求状态:"已履行";},从不〉有效负载操作〈未知,字符串,{...;}&({...;}({...;}&{})),序列化错误〉〉&{...;|},组合状态,未定义,任何操作〉'。键入' AsyncThunkAction〈患者,字符串,{状态:{患者:{加载:字符串;当前请求ID:字符串;};派遣?:派遣|未定义的;额外的?:未知;拒绝值?:未知;序列化错误类型?:|未知;待定Meta?:未知;已完成Meta?:<...>未知;拒收Meta?:未知;}〉"不能分配给类型" ThunkAction〈Promise〈PayloadAction〈Patient,字符串,{arg:字符串;请求ID:字符串;请求状态:"已履行";},从不〉|有效负载操作〈未知,字符串,{arg:字符串;请求ID:字符串;请求状态:"拒绝";已中止:布尔值;条件:布尔型;}&({...;}({...;}&{})),序列化错误〉〉&{...;}...'. }, never> | PayloadAction<unknown, string, { arg: string; requestId: string; requestStatus: "rejected"; aborted: boolean; condition: boolean; } & ({ ...; } | ({ ...; } & {})), SerializedError>> & { ...; }...'.
我已经尝试在fetchPatientByDocument调用中传递状态,或者从createAsyncThunk中删除它,但似乎没有任何效果。
有什么主意吗?谢谢!
1条答案
按热度按时间34gzjxbg1#
您为
createAsyncThunk
编写的state
泛型重写似乎与整个应用的实际根状态类型不匹配。这里正确的方法是遵循我们的TS使用指南来推断 * 整个 * 应用状态的
RootState
类型,并使用该类型: