Экспорт интерфейса состояния хранилища избыточности

Приступив к созданию редукционного модуля, я создал следующие файлы:

//state.tsx
export default interface State {
  readonly user: any;
  readonly isLoggedIn: boolean;
}


//types.tsx
export default {
  REQUEST: 'authentication/REQUEST',
  SUCCESS: 'authentication/SUCCESS',
  FAILURE: 'authentication/FAILURE',
  LOGOUT: 'authentication/LOGOUT'
};


//reducers.tsx
import Types from './types';
import State from './state';
import { Reducer, AnyAction } from 'redux';

const initialState: State = {
  user: null,
  isLoggedIn: false
};

export default class {
  reducer: Reducer<State> = (
    state: State = initialState,
    action: AnyAction
  ) => {
    // brahbrah
  };
}

//index.tsx
import reducer from './reducers';
import Types from './types';
import State from './state';

export default {
  reducer,
  Types,
  // How to export State in this default export?
};

но я не уверен, как экспортировать определение интерфейса состояния в index.tsx.

Когда я просто ставлю State в экспорте, он мне говорит 'State' only refers to a type, but is being used as a value here. и я понимаю, что это неправильно, но что нужно для экспорта этого определения?

Проблема в том, что вы пытаетесь экспортировать объект, но типы и интерфейсы Typescript существуют только до компиляции. Каким будет значение объекта для этого ключа? Я согласен, что для TS было бы логично поддерживать такое формирование, так как можно просто экспортировать интерфейс отдельно, но насколько я знаю, на данный момент этого сделать нельзя, нужно будет экспортировать интерфейс отдельно.

Etheryte 07.04.2019 22:34

Спасибо, что дали мне объяснение, пожалуйста, опубликуйте что-нибудь, если хотите отметить этот вопрос как ответ. Действительно, пока я использую индивидуальный export type AuthenticationState = State. Кроме того, во-первых, я не уверен, что объединение редьюсера, типов действий и интерфейса состояния в один экспорт по умолчанию является хорошей практикой в ​​дизайне. Типы действий и интерфейс состояния, по-видимому, имеют другие характеристики, чем у редуктора.

kemakino 08.04.2019 04:15
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
2
370
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема в том, что вы пытаетесь экспортировать объект, но типы и интерфейсы Typescript существуют только до компиляции. Каким будет значение объекта для этого ключа?

// Typescript
interface Foo {};

export default {
  Foo,
};

// Compiled Javascript
export default {
  Foo: ???
};

Я согласен, что для TS было бы логично поддерживать это формирование, так как можно просто экспортировать интерфейс отдельно, но насколько я знаю, на данный момент этого сделать нельзя, нужен отдельный экспорт.

export interface Foo {};

export default {
  // Rest of the things
};

Другие вопросы по теме