Я решил использовать 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]));