TypeScript 错误“(响应)=> void”类型的参数不可分配给“(值:void)=> void”类型的参数PromiseLike<void>'

时间:2021-01-13 03:34:44

标签: javascript typescript types typeerror

我用以下代码输入了这个问题:

“类型 '(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);
        });

2 个答案:

答案 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。