我用以下代码输入了这个问题:
“类型 '(response: IResponse) => void' 的参数不可分配给类型为 '(value: void) => void | PromiseLike' 的参数。
问题是 check() 函数。
你能帮我吗? 我真的不知道如何解决。 谢谢!
interface IResponse {
isChecked: boolean;
}
type TResponse = IResponse;
.....
function dispatchAsync<TResponsePayload>(dispatch: Dispatch, actionType: string, asyncCall: () => Promise<TResponsePayload>): any;
....
check = async () => {
const {actions, param} = this.props;
await actions.getInfoById(param.id).then(
(response: IResponse) => {
this.setState({isChecked: response.isChecked});
}
);
};
.....
getInfoById = async (id: string): Promise<void> =>
dispatchAsync<TPermission>(this.dispatch, CHECK_ACTION, async () => {
return await this.service.getInfoById(id);
});
答案 0 :(得分:1)
再解释一下,TypeScript 错误换句话说就是告诉你,你不能用一个需要参数的函数代替一个不需要任何参数的函数。 想象一下这样的代码:
<Switch>
<Route exact path={`/dashboard`} component={Dashboard} />
<Route exact path={`/submissions`} component={SubmissionSelect} />
<Route exact path={`/submissions/:id`} component={SubmissionPage} />
</Switch>;
很明显,const myArg = (param: number) => setState(param + 5);
const caller = (arg: () => void) => arg();
caller(myArg);
在调用它的参数时不会提供任何参数。因此,使用 caller
调用 caller
将导致在 myArg
内抛出错误,因为它不会收到预期的参数。
在您的示例中,myArg
返回 getInfoById
。这意味着 Promise<void>
方法将不为所提供的回调提供任何参数。这就是根本原因。
您可以通过告诉 TypeScript then
实际上返回 promise 内的某些内容来修复它(在这种情况下,我假设它是 getInfoById
类型)。
像这样:
IResponse
答案 1 :(得分:0)
您可以在下面查看您的代码:
getInfoById = async (id: string): Promise<void> =>
dispatchAsync<TPermission>(this.dispatch, CHECK_ACTION, async () => {
return await this.service.getInfoById(id);
});
您可以使用 void
或您的特定数据类型更改 Promise<void>
中的 any
。
因为如果使用 void
则可以使用 return。