繁体   English   中英

在 redux createAsyncThunk 中返回数据数组时,Typescript 抛出错误

[英]Typescript throws error when returning array of data in redux createAsyncThunk

所以我使用以下代码来获取用户列表,

export const fetchUserById = createAsyncThunk(
  "users/fetchById",
  async (_, { rejectWithValue, fulfillWithValue }) => {
    try {
      const response = await fetch(`https://reqres.in/api/users`)
      const j = (await response.json()) as MyData[]
      return fulfillWithValue(j)
    } catch (e) {
      return rejectWithValue(e.response)
    }
  }
)

打字稿给出以下错误,

Argument of type '(_: void, { rejectWithValue, fulfillWithValue }: GetThunkAPI<{}>) => Promise<RejectWithValue<unknown, unknown> | FulfillWithMeta<MyData[], unknown>>' is not assignable to parameter of type 'AsyncThunkPayloadCreator<MyData[], void, {}>'.
  Type 'Promise<RejectWithValue<unknown, unknown> | FulfillWithMeta<MyData[], unknown>>' is not assignable to type 'AsyncThunkPayloadCreatorReturnValue<MyData[], {}>'.
    Type 'Promise<RejectWithValue<unknown, unknown> | FulfillWithMeta<MyData[], unknown>>' is not assignable to type 'Promise<RejectWithValue<unknown, unknown> | MyData[]>'.
      Type 'RejectWithValue<unknown, unknown> | FulfillWithMeta<MyData[], unknown>' is not assignable to type 'RejectWithValue<unknown, unknown> | MyData[]'.
        Type 'FulfillWithMeta<MyData[], unknown>' is not assignable to type 'RejectWithValue<unknown, unknown> | MyData[]'.
          Type 'FulfillWithMeta<MyData[], unknown>' is not assignable to type 'RejectWithValue<unknown, unknown>'.
            Types have separate declarations of a private property '_type'.ts(2345)

ThunkApiConfig泛型参数的fulfillWithValue属性指定类型。

import { createAsyncThunk } from '@reduxjs/toolkit';

interface MyData {}

export const fetchUserById = createAsyncThunk<MyData[], void, { fulfilledMeta: any }>(
  'users/fetchById',
  async (_, { rejectWithValue, fulfillWithValue }) => {
    try {
      const response = await fetch(`https://reqres.in/api/users`);
      const j = await response.json();
      return fulfillWithValue(j, null);
    } catch (e) {
      return rejectWithValue(e.response);
    }
  },
);

包版本: "@reduxjs/toolkit": "^1.6.0"

参考源码

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM