2017-11-13 3 views
0

Ich versuche, eine Front-End-Umgebung mit react + redux + typescript einzurichten, aber ich habe Probleme, damit es funktioniert Mähdrescher. Ich erhalte einen Fehler: Das Argument des Typs ist nicht dem Parameter 'ReducersMapObject' zuweisbar. Siehe die vollständige Fehlermeldung unter dem Code.CombineReducers mit Typescript gibt Fehler "Argument des Typs ist nicht zu Parameter vom Typ 'ReducersMapObject'"

STATE: (types/index.tsx)

export namespace StoreState { 

    export type Enthusiasm = { 
    languageName: string; 
    enthusiasmLevel: number; 
    } 

    export type All = { 
    enthusiasm: Enthusiasm 
    } 
} 

STORE: (store.tsx)

import { createStore } from 'redux'; 
import reducers from './reducers/index'; 
import { StoreState } from './types/index'; 

let devtools: any = window['devToolsExtension'] ? window['devToolsExtension']() : (f:any)=>f; 

const Store = createStore<StoreState.All>(reducers, devtools); 
export default Store; 

REDUZIERER: (/reducers/HelloReducer.tsx)

import { EnthusiasmAction } from '../actions'; 
import { StoreState } from '../types/index'; 
import { INCREMENT_ENTHUSIASM, DECREMENT_ENTHUSIASM } from '../constants/index'; 

export const enthusiasm = (state: StoreState.Enthusiasm, action: EnthusiasmAction): StoreState.Enthusiasm => { 
    switch (action.type) { 
    case INCREMENT_ENTHUSIASM: 
     return { ...state, enthusiasmLevel: state.enthusiasmLevel + 1 }; 
    case DECREMENT_ENTHUSIASM: 
     return { ...state, enthusiasmLevel: Math.max(1, state.enthusiasmLevel - 1) }; 
    default: 
     return state; 

} }

VERKNÜPFUNG REDUCERS (/reducers/index.tsx)

import { StoreState } from '../types/index'; 
import * as enthusiasmReducer from './HelloReducer'; 

import { combineReducers } from 'redux'; 

const reducer = combineReducers<StoreState.All>({ 
    enthusiasm: enthusiasmReducer 
}); 

export default reducer; 

enter image description here

Antwort

1

Sie das Objekt mit allen HelloReducer ‚Exporte statt nur die Reduzierung vorbei. Es gibt ein paar Möglichkeiten, es zu beheben. Sie können die Minderer wählen:

const reducer = combineReducers<StoreState.All>({ 
    enthusiasm: enthusiasmReducer.enthusiasm 
}); 

oder Import nur die Minderer:

import {enthusiasm} from './HelloReducer'; 
.. 
const reducer = combineReducers({enthusiasm}); 

oder export default enthusiasm;-HelloReducer.tsx hinzufügen und den Import zu

import enthusiasmReducer from './HelloReducer'; 
+0

Ja ändern! Du hast recht. Ich bin ziemlich neu in Reaktion :) Danke! – podeig

Verwandte Themen