Экспорт интерфейса состояния магазина - PullRequest
1 голос
/ 07 апреля 2019

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

//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., и я понимаю, что это неверный путь, но что нужно для экспорта этого определения?

1 Ответ

2 голосов
/ 08 апреля 2019

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

// Typescript
interface Foo {};

export default {
  Foo,
};

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

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

export interface Foo {};

export default {
  // Rest of the things
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...