Ich habe Mühe, meine Aktionen in verbundenen Komponenten typsicher zu halten.Wie können Aktionsersteller in verbundenen Komponenten mit Redux, React und TypeScript verwaltet werden?
Grundsätzlich, wenn ich ein paar Redux Aktion Schöpfer importieren, wickeln Sie sie mit dem Dispatcher react-redux
und geben sie als Requisiten zu einer Komponente verwendet wird, würde Ich mag die daraus resultierenden Aktionen der ursprünglichen Typinformationen aus den importierten Funktionen aufrecht zu erhalten.
Aktionen haben Typen und Rückgabetyp abgeleitet wird:
export const actionA = (p1: string, p2: number) =>
({ type: 'EXAMPLE_A', payload: { p1, p2 } })
export const actionB = (p1: number) =>
({ type: 'EXAMPLE_B', payload: p1 })
Aber meine Komponente noch einige any
Typen haben den Compiler zu erfüllen, gibt Sicherheit zu verlieren.
import * as React from 'react'
import { Dispatch, bindActionCreators } from 'redux'
import { connect } from 'react-redux'
import * as exampleActions from '../actions/example'
interface MyComponentProps {
someStore: SomeStoreState,
actions: any // <-- Just use whatever types exampleActions have?
}
class MyComponent extends React.Component<MyComponentProps, {}> {
constructor(props: MyComponentProps) {
super(props)
}
private foo() {
const { actionA } = this.props.actions.exampleActions
actionA('foo', 'bar') // <-- Compile time error pls
}
public render() {
return null
}
}
const mapStateToProps = (state: RootState) => ({
someStore: state.someStore
})
const mapDispatchToProps = (dispatch: Dispatch<any>) => ({
actions: {
exampleActions: bindActionCreators<any>(exampleActions, dispatch)
}
})
export default connect (mapStateToProps, mapDispatchToProps)(MyComponent)
Deklaration der Funktion Parametertypen wieder in den Requisiten Schnittstelle sorta hilft, aber ich würde nur die ursprünglichen Arten erhalten möchten, so dass sie an einem Ort definiert sind.
Ich interessiere mich nicht wirklich für die Typen innerhalb des Dispatcher selbst, also irgendwie die exampleTypes
(und irgendwelche anderen Aktionen ') Art Informationen zu den Stützen gießen würde eine gute Lösung für mich sein, als ob die Versandbindung warn Da waren sie überhaupt und die Schöpfer selbst wurden als Requisiten verabschiedet.
Zusätzlich verwendet die Anwendung redux-promise-middleware
, was bedeutet, dass einige Aktionen Versprechungen zurückgeben können. Ich möchte auch, dass diese Informationen erhalten bleiben, damit Aktionen innerhalb der Komponente verkettet werden können. Aber ich denke, mit Casting sollte das kein Problem sein.
Überprüfen Sie diese Bibliothek https://github.com/aikoven/typescript-fsa – MistyK