Type d'Erreur lors de l'utilisation de la Machine avec Réagissent-Redux

Je suis en train d'utiliser réagir-redux avec la machine et je suis un type d'erreur lorsque j'essaie d'injecter des accessoires à l'aide de connect() et mapStateToProps.

Mon composant ressemble à ceci:

function mapStateToProps(state) {
    return {
        counter: state.counter
    };
}

function mapDispatchToProps(dispatch) {
    return {
        incr: () => {
            dispatch({type: 'INCR', by: 2});
        },
        decr: () => {
            dispatch({type: 'INCR', by: -1});
        }
    };
}




export default class Counter extends React.Component<HelloProps, any> {
    render() {
        return (
          <div>
              <p>
                  <label>Counter: </label>
                  <b>#{this.props.counter}</b>
              </p>
              <button onClick={e => this.props.incr() }>INCREMENT</button>
              <span style={{ padding: "0 5px" }}/>
              <button onClick={e => this.props.decr() }>DECREMENT</button>
        );
    }
}


export default connect(mapStateToProps, mapDispatchToProps)(Counter);

Le magasin ressemble à ceci

let store = createStore(
    (state:HelloState, action:HelloAction) => {
        switch (action.type) {
            case 'INCR':
                return {counter: state.counter + action.by};
            default:
                return state;
        }
    },

Enfin, j'ai défini ma types:

interface HelloProps {
    counter?: number;
    incr?: () => any;
    decr?: () => any;
}

interface HelloState { 
    counter:number;
}

interface HelloAction { 
    type:string, 
    by:number;
}

Lorsque j'essaie de compiler le code j'obtiens l'erreur suivante:

(39,61): error TS2345: Argument of type 'typeof Counter' is not assignable to parameter of type 'ComponentClass<{ counter: any; } & { incr: () => void; decr: () => void; }> | StatelessComponent<...'.
  Type 'typeof Counter' is not assignable to type 'StatelessComponent<{ counter: any; } & { incr: () => void; decr: () => void; }>'.
    Type 'typeof Counter' provides no match for the signature '(props?: { counter: any; } & { incr: () => void; decr: () => void; }, context?: any): ReactElement<any>' 

Il est intéressant de noter le code fonctionne toujours, même si elle déclenche le type d'erreur. Aussi, la modification de la composante de la prop interface pour les résout aussi le problème. Il semble que le type de système ne peut pas comprendre que les deux objets sont fusionnés par les deux mappé fonctions.

Vous exportez le Composant de Compteur deux fois, peut-être qui peut aussi être un problème ici.

OriginalL'auteur Ochowie | 2016-05-03