Решить ошибку React / Typescript: переменная экспорта использует имя из внешнего модуля - PullRequest
1 голос
/ 27 апреля 2020

Я использую React с Redux и Typescript и получаю странную ошибку, которую не знаю, как решить?

Экспортированная переменная 'rootReducer' имеет или использует имя 'ITransactionAddAction' из внешнего модуля "/ Пользователи / lony / рабочий стол / жилет / реагировать на портфель акций / src / store / account / types ", но не могут быть названы .ts (4023)

Именованный ITransactionAddAction определен внутри учетной записи / типы, которые можно увидеть ниже и указывающие редуктор для добавления транзакции в хранилище учетной записи.

rootReducer.ts

rootReducer error

store.ts

store error

У меня есть две учетные записи и портфель «резервных хранилищ», и оба структурированы одинаково, каждый из которых содержит один редуктор и один тип файлов.

В качестве примера приведу один раз код учетной записи:

учет / типы

// Data

export interface ITransaction {
  isin: string;
  order_action?: string;
  quantity: number;
  price: number;
  cost: number;
  order_datetime: Date;
  valuta_datetime?: Date;
}

export type ITransactionArray = Array<ITransaction>;

export interface IAccount {
  transactions: ITransactionArray;
}

// Action

export const TRANSACTION_ADD = "TRANSACTION_ADD";
export const TRANSACTION_DELETE = "TRANSACTION_DELETE";
export const TRANSACTION_UPDATE = "TRANSACTION_UPDATE";

interface ITransactionAddAction {
  type: typeof TRANSACTION_ADD;
  payload: ITransaction;
}

interface ITransactionDeleteAction {
  type: typeof TRANSACTION_DELETE;
  payload: ITransaction;
}

interface ITransactionUpdateAction {
  type: typeof TRANSACTION_UPDATE;
  payload: ITransaction;
}

export type TransactionActionTypes =
  | ITransactionAddAction
  | ITransactionDeleteAction
  | ITransactionUpdateAction;

учет / редуктор

import {
  IAccount,
  TRANSACTION_ADD,
  TRANSACTION_DELETE,
  TRANSACTION_UPDATE,
  TransactionActionTypes,
} from "./types";

const initialState: IAccount = { transactions: [] };

const accountReducer = (
  state = initialState,
  action: TransactionActionTypes
): IAccount => {
  switch (action.type) {
    case TRANSACTION_ADD:
      return {
        ...state,
        transactions: state.transactions.concat(action.payload),
      };
    case TRANSACTION_DELETE:
      return {
        ...state,
        transactions: state.transactions.filter(
          (item) => item.isin !== action.payload.isin
        ),
      };
    case TRANSACTION_UPDATE:
      const data = state.transactions.map((item) => {
        if (item.isin === action.payload.isin) {
          return action.payload;
        } else {
          return item;
        }
      });

      return {
        ...state,
        transactions: data,
      };
    default:
      return state;
  }
};

export default accountReducer;
...