diff --git a/reselect/reselect-tests.ts b/reselect/reselect-tests.ts new file mode 100644 index 0000000000..dd8031bc25 --- /dev/null +++ b/reselect/reselect-tests.ts @@ -0,0 +1,42 @@ +/// +import {createSelector, defaultMemoize} from "reselect"; + +type Item1 = { + prop1: number; +} + +type Item2 = { + prop2: number; +} + +type State = { + item1: Item1, + item2: Item2 +} + +function getItem1(state: State, props: any): Item1 { + return state.item1; +} + +function getItem2(state: State, props: any): Item2 { + return state.item2; +} + +const selector = createSelector( + getItem1, + getItem2, + (item1: Item1, item2: Item2) => { + return item1.prop1 + item2.prop2; + } +); + +const state = { + item1: { prop1: 10 }, + item2: { prop2: 20 } +} + +const props = { multiplier: 10 }; +const total: number = selector(state, props); + +const getItem2Memoized = defaultMemoize(getItem2); +const memItem: Item2 = getItem2Memoized(state, {}); \ No newline at end of file diff --git a/reselect/reselect.d.ts b/reselect/reselect.d.ts new file mode 100644 index 0000000000..72d03a83a9 --- /dev/null +++ b/reselect/reselect.d.ts @@ -0,0 +1,36 @@ +// Type definitions for reselect v2.0.2 +// Project: https://github.com/rackt/reselect +// Definitions by: Frank Wallis +// Definitions: https://github.com/borisyankov/DefinitelyTyped + +declare module Reselect { + + type Selector = (state: TInput, props?: any) => TOutput; + + function createSelector(selector1: Selector, combiner: (arg1: T1) => TOutput): Selector; + function createSelector(selector1: Selector, selector2: Selector, combiner: (arg1: T1, arg2: T2) => TOutput): Selector; + function createSelector(selector1: Selector, selector2: Selector, selector3: Selector, combiner: (arg1: T1, arg2: T2, arg3: T3) => TOutput): Selector; + function createSelector(selector1: Selector, selector2: Selector, selector3: Selector, selector4: Selector, combiner: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => TOutput): Selector; + function createSelector(selector1: Selector, selector2: Selector, selector3: Selector, selector4: Selector, selector5: Selector, combiner: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5) => TOutput): Selector; + function createSelector(selector1: Selector, selector2: Selector, selector3: Selector, selector4: Selector, selector5: Selector, selector6: Selector, combiner: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6) => TOutput): Selector; + function createSelector(selector1: Selector, selector2: Selector, selector3: Selector, selector4: Selector, selector5: Selector, selector6: Selector, selector7: Selector, combiner: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, arg7: T7) => TOutput): Selector; + function createSelector(selector1: Selector, selector2: Selector, selector3: Selector, selector4: Selector, selector5: Selector, selector6: Selector, selector7: Selector, selector8: Selector, combiner: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, arg7: T7, arg8: T8) => TOutput): Selector; + function createSelector(selector1: Selector, selector2: Selector, selector3: Selector, selector4: Selector, selector5: Selector, selector6: Selector, selector7: Selector, selector8: Selector, selector9: Selector, combiner: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, arg7: T7, arg8: T8, arg9: T9) => TOutput): Selector; + function createSelector(selector1: Selector, selector2: Selector, selector3: Selector, selector4: Selector, selector5: Selector, selector6: Selector, selector7: Selector, selector8: Selector, selector9: Selector, selector10: Selector, combiner: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, arg7: T7, arg8: T8, arg9: T9, arg10: T10) => TOutput): Selector; + function createSelector(selector1: Selector, selector2: Selector, selector3: Selector, selector4: Selector, selector5: Selector, selector6: Selector, selector7: Selector, selector8: Selector, selector9: Selector, selector10: Selector, selector11: Selector, combiner: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, arg7: T7, arg8: T8, arg9: T9, arg10: T10, arg11: T11) => TOutput): Selector; + function createSelector(selector1: Selector, selector2: Selector, selector3: Selector, selector4: Selector, selector5: Selector, selector6: Selector, selector7: Selector, selector8: Selector, selector9: Selector, selector10: Selector, selector11: Selector, selector12: Selector, combiner: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, arg7: T7, arg8: T8, arg9: T9, arg10: T10, arg11: T11, arg12: T12) => TOutput): Selector; + function createSelector(selector1: Selector, selector2: Selector, selector3: Selector, selector4: Selector, selector5: Selector, selector6: Selector, selector7: Selector, selector8: Selector, selector9: Selector, selector10: Selector, selector11: Selector, selector12: Selector, selector13: Selector, combiner: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, arg7: T7, arg8: T8, arg9: T9, arg10: T10, arg11: T11, arg12: T12, arg13: T13) => TOutput): Selector; + function createSelector(selector1: Selector, selector2: Selector, selector3: Selector, selector4: Selector, selector5: Selector, selector6: Selector, selector7: Selector, selector8: Selector, selector9: Selector, selector10: Selector, selector11: Selector, selector12: Selector, selector13: Selector, selector14: Selector, combiner: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, arg7: T7, arg8: T8, arg9: T9, arg10: T10, arg11: T11, arg12: T12, arg13: T13, arg14: T14) => TOutput): Selector; + + function createStructuredSelector(inputSelectors: any, selectorCreator?: any): any; + + type EqualityChecker = (arg1: T, arg2: T) => boolean; + type Memoizer = (func: TFunc, equalityCheck?: EqualityChecker) => TFunc; + + const defaultMemoize: Memoizer; + function createSelectorCreator(memoize: Memoizer, ...memoizeOptions: any[]): any; +} + +declare module "reselect" { + export = Reselect +} \ No newline at end of file