Как правильно набрать NormalizedSchema в качестве PayloadAction на redux-toolkit? - PullRequest
0 голосов
/ 18 февраля 2020

Я решил использовать redux-toolkit, чтобы уменьшить избыточность. Моя проблема в том, что я не могу найти пример или правильный способ ввода нормализованной полезной нагрузки?

Я использую шаблон TS в проекте React Native.

Это мой упрощенный вариант использования.

Из types.d.ts

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

import {NormalizedSchema} from 'normalizr';

declare type Pet = {
   id: string;
   name: string;
}

declare type NormalizedState<T> = {
  byIds: {
    [key: string]: T;
  };
  allIds: string[];
  // meta?: PaginatableMeta;
};

declare type NormalizedPayload<
  P,
  T extends string = string,
  M = never,
  E = never
> = PayloadAction<NormalizedSchema<P, string[]>, T, M, E>;

Срез состояния питомца

const petsSlice = createSlice({
  name: 'pets',
  initialState,
  reducers: {
    fetchPets() {},
    fetchPetsSuccess(
      state,
      {payload}: NormalizedPayload<{pets: {[key: string]: Pet}}>,
    ) {
      return state;
    },
  },
});

Из схемы .ts

import {schema} from 'normalizr';

export const pet = new schema.Entity('pets');

При вызове редуктора fetchPetsSuccess выдается ошибка TS

import {normalize} from 'normalizr';
import {pet} from './schema';
import {Pet} from './types'
import slice from '.'

const petsList: Pet[] = [{
    id: 'myId',
    name: 'Foo'
}];

// TS error here
slice.reducer.fetchPetsSuccess(undefined, normalize(petsList, [pet]));
...