Merge pull request #7922 from chrootsu/lodash-unionBy

lodash: changed _.unionBy
This commit is contained in:
Masahiro Wakame
2016-02-06 23:29:17 +09:00
2 changed files with 676 additions and 28 deletions
+163
View File
@@ -1934,6 +1934,169 @@ module TestUnion {
}
}
// _.unionBy
namespace TestUnionBy {
let array: TResult[];
let list: _.List<TResult>;
let iteratee: (value: TResult) => any;
{
let result: TResult[];
result = _.unionBy<TResult>(array, array);
result = _.unionBy<TResult>(array, list, array);
result = _.unionBy<TResult>(array, array, list, array);
result = _.unionBy<TResult>(array, list, array, list, array);
result = _.unionBy<TResult>(array, array, list, array, list, array);
result = _.unionBy<TResult>(array, array, iteratee);
result = _.unionBy<TResult>(array, list, array, iteratee);
result = _.unionBy<TResult>(array, array, list, array, iteratee);
result = _.unionBy<TResult>(array, list, array, list, array, iteratee);
result = _.unionBy<TResult>(array, array, list, array, list, array, iteratee);
result = _.unionBy<TResult>(array, array, 'a');
result = _.unionBy<TResult>(array, list, array, 'a');
result = _.unionBy<TResult>(array, array, list, array, 'a');
result = _.unionBy<TResult>(array, list, array, list, array, 'a');
result = _.unionBy<TResult>(array, array, list, array, list, array, 'a');
result = _.unionBy<TResult, {a: number}>(array, array, {a: 1});
result = _.unionBy<TResult, {a: number}>(array, list, array, {a: 1});
result = _.unionBy<TResult, {a: number}>(array, array, list, array, {a: 1});
result = _.unionBy<TResult, {a: number}>(array, list, array, list, array, {a: 1});
result = _.unionBy<TResult>(array, list, array, list, array, list, {a: 1});
result = _.unionBy<TResult>(list, list);
result = _.unionBy<TResult>(list, array, list);
result = _.unionBy<TResult>(list, list, array, list);
result = _.unionBy<TResult>(list, array, list, array, list);
result = _.unionBy<TResult>(list, list, array, list, array, list);
result = _.unionBy<TResult>(list, list, iteratee);
result = _.unionBy<TResult>(list, array, list, iteratee);
result = _.unionBy<TResult>(list, list, array, list, iteratee);
result = _.unionBy<TResult>(list, array, list, array, list, iteratee);
result = _.unionBy<TResult>(list, list, array, list, array, list, iteratee);
result = _.unionBy<TResult>(list, list, 'a');
result = _.unionBy<TResult>(list, array, list, 'a');
result = _.unionBy<TResult>(list, list, array, list, 'a');
result = _.unionBy<TResult>(list, array, list, array, list, 'a');
result = _.unionBy<TResult>(list, list, array, list, array, list, 'a');
result = _.unionBy<TResult, {a: number}>(list, list, {a: 1});
result = _.unionBy<TResult, {a: number}>(list, array, list, {a: 1});
result = _.unionBy<TResult, {a: number}>(list, list, array, list, {a: 1});
result = _.unionBy<TResult, {a: number}>(list, array, list, array, list, {a: 1});
result = _.unionBy<TResult>(list, array, list, array, list, array, {a: 1});
}
{
let result: _.LoDashImplicitArrayWrapper<TResult>;
result = _(array).unionBy<TResult>(array);
result = _(array).unionBy<TResult>(list, array);
result = _(array).unionBy<TResult>(array, list, array);
result = _(array).unionBy<TResult>(list, array, list, array);
result = _(array).unionBy<TResult>(array, list, array, list, array);
result = _(array).unionBy<TResult>(array, iteratee);
result = _(array).unionBy<TResult>(list, array, iteratee);
result = _(array).unionBy<TResult>(array, list, array, iteratee);
result = _(array).unionBy<TResult>(list, array, list, array, iteratee);
result = _(array).unionBy<TResult>(array, list, array, list, array, iteratee);
result = _(array).unionBy<TResult>(array, 'a');
result = _(array).unionBy<TResult>(list, array, 'a');
result = _(array).unionBy<TResult>(array, list, array, 'a');
result = _(array).unionBy<TResult>(list, array, list, array, 'a');
result = _(array).unionBy<TResult>(array, list, array, list, array, 'a');
result = _(array).unionBy<TResult, {a: number}>(array, {a: 1});
result = _(array).unionBy<TResult, {a: number}>(list, array, {a: 1});
result = _(array).unionBy<TResult, {a: number}>(array, list, array, {a: 1});
result = _(array).unionBy<TResult, {a: number}>(list, array, list, array, {a: 1});
result = _(array).unionBy<TResult>(list, array, list, array, list, {a: 1});
result = _(list).unionBy<TResult>(list);
result = _(list).unionBy<TResult>(array, list);
result = _(list).unionBy<TResult>(list, array, list);
result = _(list).unionBy<TResult>(array, list, array, list);
result = _(list).unionBy<TResult>(list, array, list, array, list);
result = _(list).unionBy<TResult>(list, iteratee);
result = _(list).unionBy<TResult>(array, list, iteratee);
result = _(list).unionBy<TResult>(list, array, list, iteratee);
result = _(list).unionBy<TResult>(array, list, array, list, iteratee);
result = _(list).unionBy<TResult>(list, array, list, array, list, iteratee);
result = _(list).unionBy<TResult>(list, 'a');
result = _(list).unionBy<TResult>(array, list, 'a');
result = _(list).unionBy<TResult>(list, array, list, 'a');
result = _(list).unionBy<TResult>(array, list, array, list, 'a');
result = _(list).unionBy<TResult>(list, array, list, array, list, 'a');
result = _(list).unionBy<TResult, {a: number}>(list, {a: 1});
result = _(list).unionBy<TResult, {a: number}>(array, list, {a: 1});
result = _(list).unionBy<TResult, {a: number}>(list, array, list, {a: 1});
result = _(list).unionBy<TResult, {a: number}>(array, list, array, list, {a: 1});
result = _(list).unionBy<TResult>(array, list, array, list, array, {a: 1});
}
{
let result: _.LoDashExplicitArrayWrapper<TResult>;
result = _(array).chain().unionBy<TResult>(array);
result = _(array).chain().unionBy<TResult>(list, array);
result = _(array).chain().unionBy<TResult>(array, list, array);
result = _(array).chain().unionBy<TResult>(list, array, list, array);
result = _(array).chain().unionBy<TResult>(array, list, array, list, array);
result = _(array).chain().unionBy<TResult>(array, iteratee);
result = _(array).chain().unionBy<TResult>(list, array, iteratee);
result = _(array).chain().unionBy<TResult>(array, list, array, iteratee);
result = _(array).chain().unionBy<TResult>(list, array, list, array, iteratee);
result = _(array).chain().unionBy<TResult>(array, list, array, list, array, iteratee);
result = _(array).chain().unionBy<TResult>(array, 'a');
result = _(array).chain().unionBy<TResult>(list, array, 'a');
result = _(array).chain().unionBy<TResult>(array, list, array, 'a');
result = _(array).chain().unionBy<TResult>(list, array, list, array, 'a');
result = _(array).chain().unionBy<TResult>(array, list, array, list, array, 'a');
result = _(array).chain().unionBy<TResult, {a: number}>(array, {a: 1});
result = _(array).chain().unionBy<TResult, {a: number}>(list, array, {a: 1});
result = _(array).chain().unionBy<TResult, {a: number}>(array, list, array, {a: 1});
result = _(array).chain().unionBy<TResult, {a: number}>(list, array, list, array, {a: 1});
result = _(array).chain().unionBy<TResult>(list, array, list, array, list, {a: 1});
result = _(list).chain().unionBy<TResult>(list);
result = _(list).chain().unionBy<TResult>(array, list);
result = _(list).chain().unionBy<TResult>(list, array, list);
result = _(list).chain().unionBy<TResult>(array, list, array, list);
result = _(list).chain().unionBy<TResult>(list, array, list, array, list);
result = _(list).chain().unionBy<TResult>(list, iteratee);
result = _(list).chain().unionBy<TResult>(array, list, iteratee);
result = _(list).chain().unionBy<TResult>(list, array, list, iteratee);
result = _(list).chain().unionBy<TResult>(array, list, array, list, iteratee);
result = _(list).chain().unionBy<TResult>(list, array, list, array, list, iteratee);
result = _(list).chain().unionBy<TResult>(list, 'a');
result = _(list).chain().unionBy<TResult>(array, list, 'a');
result = _(list).chain().unionBy<TResult>(list, array, list, 'a');
result = _(list).chain().unionBy<TResult>(array, list, array, list, 'a');
result = _(list).chain().unionBy<TResult>(list, array, list, array, list, 'a');
result = _(list).chain().unionBy<TResult, {a: number}>(list, {a: 1});
result = _(list).chain().unionBy<TResult, {a: number}>(array, list, {a: 1});
result = _(list).chain().unionBy<TResult, {a: number}>(list, array, list, {a: 1});
result = _(list).chain().unionBy<TResult, {a: number}>(array, list, array, list, {a: 1});
result = _(list).chain().unionBy<TResult>(array, list, array, list, array, {a: 1});
}
}
// _.uniq
module TestUniq {
type SampleObject = {a: number; b: string; c: boolean};
+513 -28
View File
@@ -4162,6 +4162,519 @@ declare module _ {
union<T>(...arrays: List<T>[]): LoDashExplicitArrayWrapper<T>;
}
//_.unionBy
interface LoDashStatic {
/**
* This method is like `_.union` except that it accepts `iteratee` which is
* invoked for each element of each `arrays` to generate the criterion by which
* uniqueness is computed. The iteratee is invoked with one argument: (value).
*
* @param arrays The arrays to inspect.
* @param iteratee The iteratee invoked per element.
* @return Returns the new array of combined values.
*/
unionBy<T>(
arrays: T[]|List<T>,
iteratee?: (value: T) => any
): T[];
/**
* @see _.unionBy
*/
unionBy<T, W extends Object>(
arrays: T[]|List<T>,
iteratee?: W
): T[];
/**
* @see _.unionBy
*/
unionBy<T>(
arrays1: T[]|List<T>,
arrays2: T[]|List<T>,
iteratee?: (value: T) => any
): T[];
/**
* @see _.unionBy
*/
unionBy<T, W extends Object>(
arrays1: T[]|List<T>,
arrays2: T[]|List<T>,
iteratee?: W
): T[];
/**
* @see _.unionBy
*/
unionBy<T>(
arrays1: T[]|List<T>,
arrays2: T[]|List<T>,
arrays3: T[]|List<T>,
iteratee?: (value: T) => any
): T[];
/**
* @see _.unionBy
*/
unionBy<T, W extends Object>(
arrays1: T[]|List<T>,
arrays2: T[]|List<T>,
arrays3: T[]|List<T>,
iteratee?: W
): T[];
/**
* @see _.unionBy
*/
unionBy<T>(
arrays1: T[]|List<T>,
arrays2: T[]|List<T>,
arrays3: T[]|List<T>,
arrays4: T[]|List<T>,
iteratee?: (value: T) => any
): T[];
/**
* @see _.unionBy
*/
unionBy<T, W extends Object>(
arrays1: T[]|List<T>,
arrays2: T[]|List<T>,
arrays3: T[]|List<T>,
arrays4: T[]|List<T>,
iteratee?: W
): T[];
/**
* @see _.unionBy
*/
unionBy<T>(
arrays1: T[]|List<T>,
arrays2: T[]|List<T>,
arrays3: T[]|List<T>,
arrays4: T[]|List<T>,
arrays5: T[]|List<T>,
iteratee?: (value: T) => any
): T[];
/**
* @see _.unionBy
*/
unionBy<T, W extends Object>(
arrays1: T[]|List<T>,
arrays2: T[]|List<T>,
arrays3: T[]|List<T>,
arrays4: T[]|List<T>,
arrays5: T[]|List<T>,
iteratee?: W
): T[];
/**
* @see _.unionBy
*/
unionBy<T>(
arrays: T[]|List<T>,
...iteratee: any[]
): T[];
}
interface LoDashImplicitArrayWrapper<T> {
/**
* @see _.unionBy
*/
unionBy<T>(
iteratee?: (value: T) => any
): LoDashImplicitArrayWrapper<T>;
/**
* @see _.unionBy
*/
unionBy<T, W extends Object>(
iteratee?: W
): LoDashImplicitArrayWrapper<T>;
/**
* @see _.unionBy
*/
unionBy<T>(
arrays2: T[]|List<T>,
iteratee?: (value: T) => any
): LoDashImplicitArrayWrapper<T>;
/**
* @see _.unionBy
*/
unionBy<T, W extends Object>(
arrays2: T[]|List<T>,
iteratee?: W
): LoDashImplicitArrayWrapper<T>;
/**
* @see _.unionBy
*/
unionBy<T>(
arrays2: T[]|List<T>,
arrays3: T[]|List<T>,
iteratee?: (value: T) => any
): LoDashImplicitArrayWrapper<T>;
/**
* @see _.unionBy
*/
unionBy<T, W extends Object>(
arrays2: T[]|List<T>,
arrays3: T[]|List<T>,
iteratee?: W
): LoDashImplicitArrayWrapper<T>;
/**
* @see _.unionBy
*/
unionBy<T>(
arrays2: T[]|List<T>,
arrays3: T[]|List<T>,
arrays4: T[]|List<T>,
iteratee?: (value: T) => any
): LoDashImplicitArrayWrapper<T>;
/**
* @see _.unionBy
*/
unionBy<T, W extends Object>(
arrays2: T[]|List<T>,
arrays3: T[]|List<T>,
arrays4: T[]|List<T>,
iteratee?: W
): LoDashImplicitArrayWrapper<T>;
/**
* @see _.unionBy
*/
unionBy<T>(
arrays2: T[]|List<T>,
arrays3: T[]|List<T>,
arrays4: T[]|List<T>,
arrays5: T[]|List<T>,
iteratee?: (value: T) => any
): LoDashImplicitArrayWrapper<T>;
/**
* @see _.unionBy
*/
unionBy<T, W extends Object>(
arrays2: T[]|List<T>,
arrays3: T[]|List<T>,
arrays4: T[]|List<T>,
arrays5: T[]|List<T>,
iteratee?: W
): LoDashImplicitArrayWrapper<T>;
/**
* @see _.unionBy
*/
unionBy<T>(
...iteratee: any[]
): LoDashImplicitArrayWrapper<T>;
}
interface LoDashImplicitObjectWrapper<T> {
/**
* @see _.unionBy
*/
unionBy<T>(
iteratee?: (value: T) => any
): LoDashImplicitArrayWrapper<T>;
/**
* @see _.unionBy
*/
unionBy<T, W extends Object>(
iteratee?: W
): LoDashImplicitArrayWrapper<T>;
/**
* @see _.unionBy
*/
unionBy<T>(
arrays2: T[]|List<T>,
iteratee?: (value: T) => any
): LoDashImplicitArrayWrapper<T>;
/**
* @see _.unionBy
*/
unionBy<T, W extends Object>(
arrays2: T[]|List<T>,
iteratee?: W
): LoDashImplicitArrayWrapper<T>;
/**
* @see _.unionBy
*/
unionBy<T>(
arrays2: T[]|List<T>,
arrays3: T[]|List<T>,
iteratee?: (value: T) => any
): LoDashImplicitArrayWrapper<T>;
/**
* @see _.unionBy
*/
unionBy<T, W extends Object>(
arrays2: T[]|List<T>,
arrays3: T[]|List<T>,
iteratee?: W
): LoDashImplicitArrayWrapper<T>;
/**
* @see _.unionBy
*/
unionBy<T>(
arrays2: T[]|List<T>,
arrays3: T[]|List<T>,
arrays4: T[]|List<T>,
iteratee?: (value: T) => any
): LoDashImplicitArrayWrapper<T>;
/**
* @see _.unionBy
*/
unionBy<T, W extends Object>(
arrays2: T[]|List<T>,
arrays3: T[]|List<T>,
arrays4: T[]|List<T>,
iteratee?: W
): LoDashImplicitArrayWrapper<T>;
/**
* @see _.unionBy
*/
unionBy<T>(
arrays2: T[]|List<T>,
arrays3: T[]|List<T>,
arrays4: T[]|List<T>,
arrays5: T[]|List<T>,
iteratee?: (value: T) => any
): LoDashImplicitArrayWrapper<T>;
/**
* @see _.unionBy
*/
unionBy<T, W extends Object>(
arrays2: T[]|List<T>,
arrays3: T[]|List<T>,
arrays4: T[]|List<T>,
arrays5: T[]|List<T>,
iteratee?: W
): LoDashImplicitArrayWrapper<T>;
/**
* @see _.unionBy
*/
unionBy<T>(
...iteratee: any[]
): LoDashImplicitArrayWrapper<T>;
}
interface LoDashExplicitArrayWrapper<T> {
/**
* @see _.unionBy
*/
unionBy<T>(
iteratee?: (value: T) => any
): LoDashExplicitArrayWrapper<T>;
/**
* @see _.unionBy
*/
unionBy<T, W extends Object>(
iteratee?: W
): LoDashExplicitArrayWrapper<T>;
/**
* @see _.unionBy
*/
unionBy<T>(
arrays2: T[]|List<T>,
iteratee?: (value: T) => any
): LoDashExplicitArrayWrapper<T>;
/**
* @see _.unionBy
*/
unionBy<T, W extends Object>(
arrays2: T[]|List<T>,
iteratee?: W
): LoDashExplicitArrayWrapper<T>;
/**
* @see _.unionBy
*/
unionBy<T>(
arrays2: T[]|List<T>,
arrays3: T[]|List<T>,
iteratee?: (value: T) => any
): LoDashExplicitArrayWrapper<T>;
/**
* @see _.unionBy
*/
unionBy<T, W extends Object>(
arrays2: T[]|List<T>,
arrays3: T[]|List<T>,
iteratee?: W
): LoDashExplicitArrayWrapper<T>;
/**
* @see _.unionBy
*/
unionBy<T>(
arrays2: T[]|List<T>,
arrays3: T[]|List<T>,
arrays4: T[]|List<T>,
iteratee?: (value: T) => any
): LoDashExplicitArrayWrapper<T>;
/**
* @see _.unionBy
*/
unionBy<T, W extends Object>(
arrays2: T[]|List<T>,
arrays3: T[]|List<T>,
arrays4: T[]|List<T>,
iteratee?: W
): LoDashExplicitArrayWrapper<T>;
/**
* @see _.unionBy
*/
unionBy<T>(
arrays2: T[]|List<T>,
arrays3: T[]|List<T>,
arrays4: T[]|List<T>,
arrays5: T[]|List<T>,
iteratee?: (value: T) => any
): LoDashExplicitArrayWrapper<T>;
/**
* @see _.unionBy
*/
unionBy<T, W extends Object>(
arrays2: T[]|List<T>,
arrays3: T[]|List<T>,
arrays4: T[]|List<T>,
arrays5: T[]|List<T>,
iteratee?: W
): LoDashExplicitArrayWrapper<T>;
/**
* @see _.unionBy
*/
unionBy<T>(
...iteratee: any[]
): LoDashExplicitArrayWrapper<T>;
}
interface LoDashExplicitObjectWrapper<T> {
/**
* @see _.unionBy
*/
unionBy<T>(
iteratee?: (value: T) => any
): LoDashExplicitArrayWrapper<T>;
/**
* @see _.unionBy
*/
unionBy<T, W extends Object>(
iteratee?: W
): LoDashExplicitArrayWrapper<T>;
/**
* @see _.unionBy
*/
unionBy<T>(
arrays2: T[]|List<T>,
iteratee?: (value: T) => any
): LoDashExplicitArrayWrapper<T>;
/**
* @see _.unionBy
*/
unionBy<T, W extends Object>(
arrays2: T[]|List<T>,
iteratee?: W
): LoDashExplicitArrayWrapper<T>;
/**
* @see _.unionBy
*/
unionBy<T>(
arrays2: T[]|List<T>,
arrays3: T[]|List<T>,
iteratee?: (value: T) => any
): LoDashExplicitArrayWrapper<T>;
/**
* @see _.unionBy
*/
unionBy<T, W extends Object>(
arrays2: T[]|List<T>,
arrays3: T[]|List<T>,
iteratee?: W
): LoDashExplicitArrayWrapper<T>;
/**
* @see _.unionBy
*/
unionBy<T>(
arrays2: T[]|List<T>,
arrays3: T[]|List<T>,
arrays4: T[]|List<T>,
iteratee?: (value: T) => any
): LoDashExplicitArrayWrapper<T>;
/**
* @see _.unionBy
*/
unionBy<T, W extends Object>(
arrays2: T[]|List<T>,
arrays3: T[]|List<T>,
arrays4: T[]|List<T>,
iteratee?: W
): LoDashExplicitArrayWrapper<T>;
/**
* @see _.unionBy
*/
unionBy<T>(
arrays2: T[]|List<T>,
arrays3: T[]|List<T>,
arrays4: T[]|List<T>,
arrays5: T[]|List<T>,
iteratee?: (value: T) => any
): LoDashExplicitArrayWrapper<T>;
/**
* @see _.unionBy
*/
unionBy<T, W extends Object>(
arrays2: T[]|List<T>,
arrays3: T[]|List<T>,
arrays4: T[]|List<T>,
arrays5: T[]|List<T>,
iteratee?: W
): LoDashExplicitArrayWrapper<T>;
/**
* @see _.unionBy
*/
unionBy<T>(
...iteratee: any[]
): LoDashExplicitArrayWrapper<T>;
}
//_.uniq
interface LoDashStatic {
/**
@@ -4729,34 +5242,6 @@ declare module _ {
): LoDashExplicitArrayWrapper<T>;
}
//_.unionBy DUMMY
interface LoDashStatic {
/**
* This method is like `_.union` except that it accepts `iteratee` which is
* invoked for each element of each `arrays` to generate the criterion by which
* uniqueness is computed. The iteratee is invoked with one argument: (value).
*
* @static
* @memberOf _
* @category Array
* @param {...Array} [arrays] The arrays to inspect.
* @param {Function|Object|string} [iteratee=_.identity] The iteratee invoked per element.
* @returns {Array} Returns the new array of combined values.
* @example
*
* _.unionBy([2.1, 1.2], [4.3, 2.4], Math.floor);
* // => [2.1, 1.2, 4.3]
*
* // using the `_.property` iteratee shorthand
* _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');
* // => [{ 'x': 1 }, { 'x': 2 }]
*/
unionBy(
array: any[]|List<any>,
...values: any[]
): any[];
}
//_.unionWith DUMMY
interface LoDashStatic {
/**