Type Fehler bei der Verwendung von Typescript mit React-Redux

Ich versuche, "react-redux" mit "typescript" zu verwenden, und es wird ein Tippfehler angezeigt, wenn ich versuche, mithilfe von "connect ()" und "mapStateToProps" Requisiten zu injizieren.

Meine Komponente sieht folgendermaßen aus:

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);

Der Laden sieht so aus

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

Abschließend habe ich meine Typen definiert als:

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

interface HelloState { 
    counter:number;
}

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

Wenn ich versuche, den Code zu kompilieren, wird der folgende Fehler angezeigt:

(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>' 

Interessanterweise funktioniert der Code immer noch, obwohl er den Typfehler ausgibt. Durch Ändern der Requisitenschnittstelle der Komponente auf "any" wird das Problem ebenfalls behoben. Es scheint, dass das Typsystem nicht versteht, dass die beiden Objekte durch die beiden zugeordneten Funktionen zusammengeführt werden.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage