javascript - TypeScript-feil Argument av typen '(response) => void' kan ikke tilordnes parameteren av typen '(value: void) => void | PromiseLike'
Jeg fikk denne typen problem med følgende kode:
"Argument av typen '(response: IResponse) => void' kan ikke tildeles parameter av typen '(value: void) => void | PromiseLike'".
Og problem denne check()-funksjonen.
Kan du være så snill å hjelpe meg? Jeg har virkelig ingen ideer om hvordan jeg skal fikse det. Takk!
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);
});Svar #1
For å forklare litt mer, forteller TypeScript-feilen deg med andre ord at du ikke kan sette en funksjon som forventer et argument på plass av en funksjon som ikke forventer noe argument overhodet. Tenk deg kode som dette:
const myArg = (param: number) => setState(param + 5);
const caller = (arg: () => void) => arg();
caller(myArg);Her er det ganske åpenbart at caller ikke vil gi noen argumenter når det kaller sitt argument. Derfor vil det å kalle caller med myArg resultere i en feil som blir kastet inne i myArg, da det ikke vil motta argumentet det forventer.
I ditt eksempel returnerer getInfoById Promise<void>. Det betyr at then-metoden ikke vil gi noen argument til den oppgitte callbacken. Det er den grunnleggende årsaken. Du kan fikse det ved å fortelle TypeScript at getInfoById faktisk returnerer noe inni promise (i dette tilfellet antar jeg at det er IResponse-typen). Slik:
getInfoById = async (id: string): Promise<IResponse> =>
dispatchAsync<TPermission>(this.dispatch, CHECK_ACTION, async () => {
return await this.service.getInfoById(id);
});Svar #2
Du kan se på koden din nedenfor:
getInfoById = async (id: string): Promise<void> =>
dispatchAsync<TPermission>(this.dispatch, CHECK_ACTION, async () => {
return await this.service.getInfoById(id);
});
Du kan endre void i din Promise<void> med any eller din spesifikke datatyper.
Fordi du kan bruke return hvis du bruker void.
