Skip to content

Instantly share code, notes, and snippets.

@serjKim
Last active September 27, 2020 12:43
Show Gist options
  • Save serjKim/d13d528137cf0ce16561e4e5cb1b40cb to your computer and use it in GitHub Desktop.
Save serjKim/d13d528137cf0ce16561e4e5cb1b40cb to your computer and use it in GitHub Desktop.
Fable + redux
module Redux =
type Reducer<'S, 'A> = 'S option -> 'A -> 'S
type IRootReducer = interface end
type IStore = interface end
type IDispatch<'A> = 'A -> unit
let combineReducers (reducers: {| listReducer: Reducer<'S, 'A> |}): IRootReducer = importMember "redux"
let createStore (rootReducer: IRootReducer): IStore = importMember "redux"
let useSelector (selector: 'S -> 'TS) : 'TS = importMember "react-redux"
let useDispatch<'A> () : IDispatch<'A> = importMember "react-redux"
let inline Provider (props: {| store: IStore |}) (elems: ReactElement list) : ReactElement = ofImport "Provider" "react-redux" props elems
module ReduxObservable =
open Rxjs
type Epic<'T, 'R> = IObservable<'T> -> IObservable<'R>
type IEpicMiddleware =
abstract run: rootEpic:Epic<'T, 'R> -> unit
let createEpicMiddleware () : IEpicMiddleware = importMember "redux-observable"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment