Приступив к созданию редукционного модуля, я создал следующие файлы:
//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.
и я понимаю, что это неправильно, но что нужно для экспорта этого определения?
Спасибо, что дали мне объяснение, пожалуйста, опубликуйте что-нибудь, если хотите отметить этот вопрос как ответ. Действительно, пока я использую индивидуальный export type AuthenticationState = State
. Кроме того, во-первых, я не уверен, что объединение редьюсера, типов действий и интерфейса состояния в один экспорт по умолчанию является хорошей практикой в дизайне. Типы действий и интерфейс состояния, по-видимому, имеют другие характеристики, чем у редуктора.
Проблема в том, что вы пытаетесь экспортировать объект, но типы и интерфейсы Typescript существуют только до компиляции. Каким будет значение объекта для этого ключа?
// Typescript
interface Foo {};
export default {
Foo,
};
// Compiled Javascript
export default {
Foo: ???
};
Я согласен, что для TS было бы логично поддерживать это формирование, так как можно просто экспортировать интерфейс отдельно, но насколько я знаю, на данный момент этого сделать нельзя, нужен отдельный экспорт.
export interface Foo {};
export default {
// Rest of the things
};
Проблема в том, что вы пытаетесь экспортировать объект, но типы и интерфейсы Typescript существуют только до компиляции. Каким будет значение объекта для этого ключа? Я согласен, что для TS было бы логично поддерживать такое формирование, так как можно просто экспортировать интерфейс отдельно, но насколько я знаю, на данный момент этого сделать нельзя, нужно будет экспортировать интерфейс отдельно.