diff --git a/types/memoize-one/v3/index.d.ts b/types/memoize-one/v3/index.d.ts new file mode 100644 index 0000000000..71f785e73c --- /dev/null +++ b/types/memoize-one/v3/index.d.ts @@ -0,0 +1,9 @@ +// Type definitions for memoize-one 3.1 +// Project: https://github.com/alexreardon/memoize-one#readme +// Definitions by: Karol Majewski , Frank Li +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + +declare function memoizeOne any>(resultFn: T, isEqual?: EqualityFn): T; +export type EqualityFn = (a: any, b: any) => boolean; + +export default memoizeOne; diff --git a/types/memoize-one/v3/memoize-one-tests.ts b/types/memoize-one/v3/memoize-one-tests.ts new file mode 100644 index 0000000000..f163add16e --- /dev/null +++ b/types/memoize-one/v3/memoize-one-tests.ts @@ -0,0 +1,33 @@ +import memoizeOne, { EqualityFn } from 'memoize-one'; + +declare function add(a: number, b: number): number ; +declare function lousyEqualityFn(a: any, b: any): boolean; +declare function strictEqualityFn(a: T, b: T): boolean; + +/** + * Accepts a second argument. + */ +memoizeOne(add); // $ExpectType (a: number, b: number) => number +memoizeOne(add, lousyEqualityFn); // $ExpectType (a: number, b: number) => number +memoizeOne(add, strictEqualityFn); // $ExpectType (a: number, b: number) => number + +/** + * The second argument can be, but doesn't have to be strictly typed. + */ +memoizeOne(add, (a, b) => a === b); // $ExpectType (a: number, b: number) => number +memoizeOne(add, (a: string, b: string) => a === b); // $ExpectType (a: number, b: number) => number + +/** + * Function passed as the second argument accepts exactly two arguments. + */ +memoizeOne(add, (a: number, b: number, c: number) => a === b || c); // $ExpectError + +/** + * Function passed as the second argument returns a boolean. + */ +memoizeOne(add, (a: string, b: string) => 0); // $ExpectError + +/** + * The `EqualityFn` type is publicly accessible. + */ +const simpleIsEqual: EqualityFn = (x: number, y: number): boolean => (x === y); diff --git a/types/memoize-one/v3/tsconfig.json b/types/memoize-one/v3/tsconfig.json new file mode 100644 index 0000000000..728bd3ee58 --- /dev/null +++ b/types/memoize-one/v3/tsconfig.json @@ -0,0 +1,26 @@ +{ + "compilerOptions": { + "module": "commonjs", + "lib": [ + "es6" + ], + "noImplicitAny": true, + "noImplicitThis": true, + "strictNullChecks": true, + "strictFunctionTypes": true, + "baseUrl": "../../", + "typeRoots": [ + "../../" + ], + "types": [], + "paths": { + "memoize-one": [ "memoize-one/v3" ] + }, + "noEmit": true, + "forceConsistentCasingInFileNames": true + }, + "files": [ + "index.d.ts", + "memoize-one-tests.ts" + ] +} diff --git a/types/memoize-one/v3/tslint.json b/types/memoize-one/v3/tslint.json new file mode 100644 index 0000000000..3db14f85ea --- /dev/null +++ b/types/memoize-one/v3/tslint.json @@ -0,0 +1 @@ +{ "extends": "dtslint/dt.json" }