TypeScript 错误 '(response) => void' 类型的参数不可分配给 '(value: void) => void | 类型的参数 PromiseLike<void>'

Son*_*nne 10 javascript types typeerror typescript

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

“类型‘(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);
        });
Run Code Online (Sandbox Code Playgroud)

小智 5

为了多解释一点,TypeScript 错误换句话说就是不能用需要参数的函数来代替不需要任何参数的函数。想象一下这样的代码:

const myArg = (param: number) => setState(param + 5);

const caller = (arg: () => void) => arg();

caller(myArg);
Run Code Online (Sandbox Code Playgroud)

很明显,caller在调用它的参数时不会提供任何参数。因此,调用callerwithmyArg将导致在内部抛出错误,myArg因为它不会收到它期望的参数。

在您的示例中getInfoById返回Promise<void>. 这意味着该then方法不会所提供的回调提供任何参数。这就是根本原因。您可以通过告诉 TypeScriptgetInfoById实际上返回承诺内的某些内容来修复它(在本例中我假设它是类型IResponse)。就像这样:

getInfoById = async (id: string): Promise<IResponse> =>
        dispatchAsync<TPermission>(this.dispatch, CHECK_ACTION, async () => {
            return await this.service.getInfoById(id);
        });
Run Code Online (Sandbox Code Playgroud)