Сбои типа потока в редукторе? - PullRequest
0 голосов
/ 07 июня 2019

Я почти уверен, что правильно следую инструкциям по вводу своих действий и переходов:

ActionTypes.js

// @flow
import type Product from "../../models/Product";

type ActionNamesObject = {
  [key: string]: { [key: string]: { [key: string]: string } }
};

export const Actions: ActionNamesObject = {
  Product: {
    Fetch: {
      start: "PRODUCT_FETCH_START",
      success: "PRODUCT_FETCH_SUCCESS"
    }
  }
};

export type ProductAction =
  | { type: "PRODUCT_FETCH_START" }
  | {
      type: "PRODUCT_FETCH_SUCCESS",
      products: Product[]
    };

редуктор

// @flow
import type Product from "../../models/Product";
import type { ProductAction } from "../actions/ActionTypes";
import { Actions } from "../actions/ActionTypes";

type ProductState = {
  +products: Product[]
};

const initialState = {
  products: []
};

export default function productsReducer(
  state: ProductState = initialState,
  action: ProductAction .   // LINE 16
): ProductState {
  switch (action.type) {
    case Actions.Product.Fetch.success:
      return { ...state, products: action.products };   // ERROR HERE
    default:
      (action: empty);   // ERROR HERE
      return state;
  }
}

Но я получаю ошибки потока, где я их пометил в файле редуктора.

Первая ошибка на products: невозможно получить action.products, поскольку свойства свойств отсутствуют в типе объекта. Ссылаясь на строку 16. Вторая ошибка на action: невозможно привести действие к пустому, потому что тип объекта несовместим с пустым. Также ссылаемся на строку 16.

Что мне не хватает?

1 Ответ

0 голосов
/ 08 июня 2019

Ваш ProductActionType возвращает две возможные фигуры, и одна не имеет products

Я не очень знаком с машинопись, но я думаю, что вы хотите что-то вроде:

export type ProductAction = {
    type: "PRODUCT_FETCH_START" | "PRODUCT_FETCH_SUCCESS"
    products: Product[]
} 

Я не уверен, что эта вторая строка кода, которая терпит неудачу, даже необходима.

...