From d027062888e43a566a6a4d9a8576ded205052682 Mon Sep 17 00:00:00 2001 From: Daniel Perez Alvarez Date: Thu, 21 Dec 2017 20:48:39 -0800 Subject: [PATCH] Add types for redux-injectable-store 1.0 --- types/redux-injectable-store/index.d.ts | 28 +++++++++++++++++++ types/redux-injectable-store/package.json | 6 ++++ .../redux-injectable-store-tests.ts | 24 ++++++++++++++++ types/redux-injectable-store/tsconfig.json | 23 +++++++++++++++ types/redux-injectable-store/tslint.json | 1 + 5 files changed, 82 insertions(+) create mode 100644 types/redux-injectable-store/index.d.ts create mode 100644 types/redux-injectable-store/package.json create mode 100644 types/redux-injectable-store/redux-injectable-store-tests.ts create mode 100644 types/redux-injectable-store/tsconfig.json create mode 100644 types/redux-injectable-store/tslint.json diff --git a/types/redux-injectable-store/index.d.ts b/types/redux-injectable-store/index.d.ts new file mode 100644 index 0000000000..14c5ac3062 --- /dev/null +++ b/types/redux-injectable-store/index.d.ts @@ -0,0 +1,28 @@ +// Type definitions for redux-injectable-store 1.0 +// Project: https://github.com/lelandrichardson/redux-injectable-store#readme +// Definitions by: Daniel Perez Alvarez +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + +import { Reducer, Store, StoreEnhancer } from "redux"; + +export interface InjectableStore extends Store { + inject(namespace: string, reducer: Reducer): void; + injectAll(reducers: { [key: string]: Reducer }): void; + clearReducers(): void; +} + +export type WrapReducer = (reducer: Reducer) => Reducer; + +export interface InjectableStoreCreator { + ( + enhancer?: StoreEnhancer, + wrapReducer?: WrapReducer + ): InjectableStore; + ( + preloadedState: S, + enhancer?: StoreEnhancer, + wrapReducer?: WrapReducer + ): InjectableStore; +} + +export const createInjectableStore: InjectableStoreCreator; diff --git a/types/redux-injectable-store/package.json b/types/redux-injectable-store/package.json new file mode 100644 index 0000000000..6d68bf2f9b --- /dev/null +++ b/types/redux-injectable-store/package.json @@ -0,0 +1,6 @@ +{ + "private": true, + "dependencies": { + "redux": "^3.6.0" + } +} diff --git a/types/redux-injectable-store/redux-injectable-store-tests.ts b/types/redux-injectable-store/redux-injectable-store-tests.ts new file mode 100644 index 0000000000..35e01684f1 --- /dev/null +++ b/types/redux-injectable-store/redux-injectable-store-tests.ts @@ -0,0 +1,24 @@ +import { createInjectableStore } from "redux-injectable-store"; +import { applyMiddleware, compose, AnyAction, Middleware } from "redux"; + +interface State { + foo: string; + bar?: string; + baz?: string; +} + +const initialState: State = { foo: "bar" }; + +const middleware: Middleware[] = []; +const enhancer = applyMiddleware(...middleware); +const store = createInjectableStore(initialState, enhancer); +const anotherStore = createInjectableStore(initialState, enhancer, reducer => reducer); + +const dummyReducer = (state: string) => state; + +store.inject("foo", dummyReducer); + +anotherStore.injectAll({ + bar: dummyReducer, + baz: dummyReducer +}); diff --git a/types/redux-injectable-store/tsconfig.json b/types/redux-injectable-store/tsconfig.json new file mode 100644 index 0000000000..1fcc143ead --- /dev/null +++ b/types/redux-injectable-store/tsconfig.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "module": "commonjs", + "lib": [ + "es6" + ], + "noImplicitAny": true, + "noImplicitThis": true, + "strictNullChecks": true, + "strictFunctionTypes": true, + "baseUrl": "../", + "typeRoots": [ + "../" + ], + "types": [], + "noEmit": true, + "forceConsistentCasingInFileNames": true + }, + "files": [ + "index.d.ts", + "redux-injectable-store-tests.ts" + ] +} diff --git a/types/redux-injectable-store/tslint.json b/types/redux-injectable-store/tslint.json new file mode 100644 index 0000000000..3db14f85ea --- /dev/null +++ b/types/redux-injectable-store/tslint.json @@ -0,0 +1 @@ +{ "extends": "dtslint/dt.json" }