lodash: use intersection types for _.memoize, support _.memoize.Cache

This commit is contained in:
thorn0
2016-01-26 12:22:47 +02:00
parent 46719185c5
commit ff62923350
4 changed files with 52 additions and 28 deletions
+5 -4
View File
@@ -9601,16 +9601,17 @@ declare module _ {
* @param resolver The function to resolve the cache key.
* @return Returns the new memoizing function.
*/
memoize<TResult extends MemoizedFunction>(
func: Function,
resolver?: Function): TResult;
memoize: {
<T extends Function>(func: T, resolver?: Function): T & MemoizedFunction;
Cache: MapCache;
}
}
interface LoDashImplicitObjectWrapper<T> {
/**
* @see _.memoize
*/
memoize<TResult extends MemoizedFunction>(resolver?: Function): LoDashImplicitObjectWrapper<TResult>;
memoize(resolver?: Function): LoDashImplicitObjectWrapper<T & MemoizedFunction>;
}
//_.modArgs
+21 -10
View File
@@ -5959,17 +5959,28 @@ module TestFlowRight {
}
// _.memoize
var testMemoizedFunction: _.MemoizedFunction;
result = <_.MapCache>testMemoizedFunction.cache;
interface TestMemoizedResultFn extends _.MemoizedFunction {
(...args: any[]): any;
namespace TestMemoize {
var testMemoizedFunction: _.MemoizedFunction;
var cache = <_.MapCache>testMemoizedFunction.cache;
interface TestMemoizedResultFn extends _.MemoizedFunction {
(a1: string, a2: number): boolean;
}
var testMemoizeFn = (a1: string, a2: number) => a1.length > a2;
var testMemoizeResolverFn = (a1: string, a2: number) => a1 + a2;
var result: TestMemoizedResultFn;
result = _.memoize(testMemoizeFn);
result = _.memoize(testMemoizeFn, testMemoizeResolverFn);
result = _(testMemoizeFn).memoize().value();
result = _(testMemoizeFn).memoize(testMemoizeResolverFn).value();
result('foo', 1);
result.cache.get('foo1');
_.memoize.Cache = {
delete: key => false,
get: key => undefined,
has: key => false,
set(key, value) { return this; }
};
}
var testMemoizeFn: (...args: any[]) => any;
var testMemoizeResolverFn: (...args: any[]) => any;
result = <TestMemoizedResultFn>_.memoize<TestMemoizedResultFn>(testMemoizeFn);
result = <TestMemoizedResultFn>_.memoize<TestMemoizedResultFn>(testMemoizeFn, testMemoizeResolverFn);
result = <TestMemoizedResultFn>(_(testMemoizeFn).memoize<TestMemoizedResultFn>().value());
result = <TestMemoizedResultFn>(_(testMemoizeFn).memoize<TestMemoizedResultFn>(testMemoizeResolverFn).value());
// _.modArgs
module TestModArgs {
+21 -10
View File
@@ -5201,17 +5201,28 @@ module TestFlowRight {
}
// _.memoize
var testMemoizedFunction: _.MemoizedFunction;
result = <_.MapCache>testMemoizedFunction.cache;
interface TestMemoizedResultFn extends _.MemoizedFunction {
(...args: any[]): any;
namespace TestMemoize {
var testMemoizedFunction: _.MemoizedFunction;
var cache = <_.MapCache>testMemoizedFunction.cache;
interface TestMemoizedResultFn extends _.MemoizedFunction {
(a1: string, a2: number): boolean;
}
var testMemoizeFn = (a1: string, a2: number) => a1.length > a2;
var testMemoizeResolverFn = (a1: string, a2: number) => a1 + a2;
var result: TestMemoizedResultFn;
result = _.memoize(testMemoizeFn);
result = _.memoize(testMemoizeFn, testMemoizeResolverFn);
result = _(testMemoizeFn).memoize().value();
result = _(testMemoizeFn).memoize(testMemoizeResolverFn).value();
result('foo', 1);
result.cache.get('foo1');
_.memoize.Cache = {
delete: key => false,
get: key => undefined,
has: key => false,
set(key, value) { return this; }
};
}
var testMemoizeFn: (...args: any[]) => any;
var testMemoizeResolverFn: (...args: any[]) => any;
result = <TestMemoizedResultFn>_.memoize<TestMemoizedResultFn>(testMemoizeFn);
result = <TestMemoizedResultFn>_.memoize<TestMemoizedResultFn>(testMemoizeFn, testMemoizeResolverFn);
result = <TestMemoizedResultFn>(_(testMemoizeFn).memoize<TestMemoizedResultFn>().value());
result = <TestMemoizedResultFn>(_(testMemoizeFn).memoize<TestMemoizedResultFn>(testMemoizeResolverFn).value());
// _.overArgs
module TestOverArgs {
+5 -4
View File
@@ -8987,16 +8987,17 @@ declare module _ {
* @param resolver The function to resolve the cache key.
* @return Returns the new memoizing function.
*/
memoize<TResult extends MemoizedFunction>(
func: Function,
resolver?: Function): TResult;
memoize: {
<T extends Function>(func: T, resolver?: Function): T & MemoizedFunction;
Cache: MapCache;
}
}
interface LoDashImplicitObjectWrapper<T> {
/**
* @see _.memoize
*/
memoize<TResult extends MemoizedFunction>(resolver?: Function): LoDashImplicitObjectWrapper<TResult>;
memoize(resolver?: Function): LoDashImplicitObjectWrapper<T & MemoizedFunction>;
}
//_.overArgs (was _.modArgs)