Merge pull request #7400 from chrootsu/lodash-flatten

lodash: signatures of _.flatten and _.flattenDeep have been changed
This commit is contained in:
Masahiro Wakame
2016-01-09 23:19:57 +09:00
2 changed files with 205 additions and 65 deletions
+144 -33
View File
@@ -632,68 +632,179 @@ module TestFirst {
result = _(list).first<TResult>();
}
result = <Array<number>>_.flatten([[1, 2], [3, 4]]);
result = <Array<number>>_.flatten([[1, 2], [3, 4], 5, 6]);
result = <Array<number|Array<Array<number>>>>_.flatten([1, [2], [3, [[4]]]]);
// _.flatten
module TestFlatten {
{
let result: string[];
result = <Array<number>>_.flatten([1, [2], [[3]]], true);
result = <Array<number>>_.flatten<number>([1, [2], [3, [[4]]]], true);
result = <Array<number|boolean>>_.flatten<number|boolean>([1, [2], [3, [[false]]]], true);
result = _.flatten('abc');
}
result = <_.LoDashImplicitArrayWrapper<number>>_([[1, 2], [3, 4], 5, 6]).flatten();
result = <_.LoDashImplicitArrayWrapper<number|Array<Array<number>>>>_([1, [2], [3, [[4]]]]).flatten();
{
let result: number[];
result = <_.LoDashImplicitArrayWrapper<number>>_([1, [2], [3, [[4]]]]).flatten(true);
result = _.flatten<number>([1, 2, 3]);
result = _.flatten<number>([1, [2, 3]]);
result = _.flatten<number>([1, [2, [3]]], true);
result = _.flatten<number>([1, [2, [3]], [[4]]], true);
result = _.flatten<number>({0: 1, 1: 2, 2: 3, length: 3});
result = _.flatten<number>({0: 1, 1: [2, 3], length: 2});
result = _.flatten<number>({0: 1, 1: [2, [3]], length: 2}, true);
result = _.flatten<number>({0: 1, 1: [2, [3]], 2: [[4]], length: 3}, true);
}
{
let result: _.RecursiveArray<number>;
result = _.flatten<number>([1, [2, [3]]]);
result = _.flatten<number>([1, [2, [3]], [[4]]]);
result = _.flatten<number>({0: 1, 1: [2, [3]], length: 2});
result = _.flatten<number>({0: 1, 1: [2, [3]], 2: [[4]], length: 3});
}
{
let result: _.LoDashImplicitArrayWrapper<string>;
result = _('abc').flatten();
}
{
let result: _.LoDashImplicitArrayWrapper<number>;
result = _([1, 2, 3]).flatten<number>();
result = _([1, [2, 3]]).flatten<number>();
result = _([1, [2, [3]]]).flatten<number>(true);
result = _([1, [2, [3]], [[4]]]).flatten<number>(true);
result = _({0: 1, 1: 2, 2: 3, length: 3}).flatten<number>();
result = _({0: 1, 1: [2, 3], length: 2}).flatten<number>();
result = _({0: 1, 1: [2, [3]], length: 2}).flatten<number>(true);
result = _({0: 1, 1: [2, [3]], 2: [[4]], length: 3}).flatten<number>(true);
}
{
let result: _.LoDashImplicitArrayWrapper<number|number[]>;
result = _([1, [2, [3]]]).flatten<number|number[]>();
result = _([1, [2, [3]], [[4]]]).flatten<number|number[]>();
result = _({0: 1, 1: [2, [3]], length: 2}).flatten<number|number[]>();
result = _({0: 1, 1: [2, [3]], 2: [[4]], length: 3}).flatten<number|number[]>();
}
{
let result: _.LoDashExplicitArrayWrapper<string>;
result = _('abc').chain().flatten();
}
{
let result: _.LoDashExplicitArrayWrapper<number>;
result = _([1, 2, 3]).chain().flatten<number>();
result = _([1, [2, 3]]).chain().flatten<number>();
result = _([1, [2, [3]]]).chain().flatten<number>(true);
result = _([1, [2, [3]], [[4]]]).chain().flatten<number>(true);
result = _({0: 1, 1: 2, 2: 3, length: 3}).chain().flatten<number>();
result = _({0: 1, 1: [2, 3], length: 2}).chain().flatten<number>();
result = _({0: 1, 1: [2, [3]], length: 2}).chain().flatten<number>(true);
result = _({0: 1, 1: [2, [3]], 2: [[4]], length: 3}).chain().flatten<number>(true);
}
{
let result: _.LoDashExplicitArrayWrapper<number|number[]>;
result = _([1, [2, [3]]]).chain().flatten<number|number[]>();
result = _([1, [2, [3]], [[4]]]).chain().flatten<number|number[]>();
result = _({0: 1, 1: [2, [3]], length: 2}).chain().flatten<number|number[]>();
result = _({0: 1, 1: [2, [3]], 2: [[4]], length: 3}).chain().flatten<number|number[]>();
}
}
// _.flattenDeep
module TestFlattenDeep {
interface RecursiveArray<T> extends Array<T|RecursiveArray<T>> {}
interface ListOfRecursiveArraysOrValues<T> extends _.List<T|RecursiveArray<T>> {}
interface RecursiveList<T> extends _.List<T|RecursiveList<T>> { }
let recursiveArray: RecursiveArray<TResult>;
let listOfMaybeRecursiveArraysOrValues: ListOfRecursiveArraysOrValues<TResult>;
let recursiveList: RecursiveList<TResult>;
{
let result: TResult[];
let result: string[];
result = _.flattenDeep<TResult>(recursiveArray);
result = _.flattenDeep<TResult>(listOfMaybeRecursiveArraysOrValues);
result = _.flattenDeep('abc');
}
{
let result: any[];
let result: number[];
result = _.flattenDeep<TResult>(recursiveList);
result = _.flattenDeep<number>([1, 2, 3]);
result = _.flattenDeep<number>([1, [2, 3]]);
result = _.flattenDeep<number>([1, [2, [3]]]);
result = _.flattenDeep<number>([1, [2, [3]], [[4]]]);
result = _.flattenDeep<number>({0: 1, 1: 2, 2: 3, length: 3});
result = _.flattenDeep<number>({0: 1, 1: [2, 3], length: 2});
result = _.flattenDeep<number>({0: 1, 1: [2, [3]], length: 2});
result = _.flattenDeep<number>({0: 1, 1: [2, [3]], 2: [[4]], length: 3});
}
{
let result: _.LoDashImplicitArrayWrapper<TResult>;
let result: _.LoDashImplicitArrayWrapper<string>;
result = _(recursiveArray).flattenDeep<TResult>();
result = _(listOfMaybeRecursiveArraysOrValues).flattenDeep<TResult>();
result = _('abc').flattenDeep();
}
{
let result: _.LoDashImplicitArrayWrapper<any>;
let result: _.LoDashImplicitArrayWrapper<number>;
result = _(recursiveList).flattenDeep();
result = _([1, 2, 3]).flattenDeep<number>();
result = _([1, [2, 3]]).flattenDeep<number>();
result = _([1, [2, [3]]]).flattenDeep<number>();
result = _([1, [2, [3]], [[4]]]).flattenDeep<number>();
result = _({0: 1, 1: 2, 2: 3, length: 3}).flattenDeep<number>();
result = _({0: 1, 1: [2, 3], length: 2}).flattenDeep<number>();
result = _({0: 1, 1: [2, [3]], length: 2}).flattenDeep<number>();
result = _({0: 1, 1: [2, [3]], 2: [[4]], length: 3}).flattenDeep<number>();
}
{
let result: _.LoDashExplicitArrayWrapper<TResult>;
let result: _.LoDashImplicitArrayWrapper<number|number[]>;
result = _(recursiveArray).chain().flattenDeep<TResult>();
result = _([1, [2, [3]]]).flattenDeep<number|number[]>();
result = _([1, [2, [3]], [[4]]]).flattenDeep<number|number[]>();
result = _(listOfMaybeRecursiveArraysOrValues).chain().flattenDeep<TResult>();
result = _({0: 1, 1: [2, [3]], length: 2}).flattenDeep<number|number[]>();
result = _({0: 1, 1: [2, [3]], 2: [[4]], length: 3}).flattenDeep<number|number[]>();
}
{
let result: _.LoDashExplicitArrayWrapper<any>;
let result: _.LoDashExplicitArrayWrapper<string>;
result = _(recursiveList).chain().flattenDeep();
result = _('abc').chain().flattenDeep();
}
{
let result: _.LoDashExplicitArrayWrapper<number>;
result = _([1, 2, 3]).chain().flattenDeep<number>();
result = _([1, [2, 3]]).chain().flattenDeep<number>();
result = _([1, [2, [3]]]).chain().flattenDeep<number>();
result = _([1, [2, [3]], [[4]]]).chain().flattenDeep<number>();
result = _({0: 1, 1: 2, 2: 3, length: 3}).chain().flattenDeep<number>();
result = _({0: 1, 1: [2, 3], length: 2}).chain().flattenDeep<number>();
result = _({0: 1, 1: [2, [3]], length: 2}).chain().flattenDeep<number>();
result = _({0: 1, 1: [2, [3]], 2: [[4]], length: 3}).chain().flattenDeep<number>();
}
{
let result: _.LoDashExplicitArrayWrapper<number|number[]>;
result = _([1, [2, [3]]]).chain().flattenDeep<number|number[]>();
result = _([1, [2, [3]], [[4]]]).chain().flattenDeep<number|number[]>();
result = _({0: 1, 1: [2, [3]], length: 2}).chain().flattenDeep<number|number[]>();
result = _({0: 1, 1: [2, [3]], 2: [[4]], length: 3}).chain().flattenDeep<number|number[]>();
}
}
+61 -32
View File
@@ -1138,47 +1138,72 @@ declare module _ {
first<TResult>(): TResult;
}
interface MaybeNestedList<T> extends List<T|List<T>> { }
interface RecursiveArray<T> extends Array<T|RecursiveArray<T>> { }
interface ListOfRecursiveArraysOrValues<T> extends List<T|RecursiveArray<T>> { }
interface RecursiveList<T> extends List<T|RecursiveList<T>> { }
interface RecursiveArray<T> extends Array<T|RecursiveArray<T>> {}
interface ListOfRecursiveArraysOrValues<T> extends List<T|RecursiveArray<T>> {}
//_.flatten
interface LoDashStatic {
/**
* Flattens a nested array a single level.
*
* _.flatten(x) is equivalent to _.flatten(x, false);
*
* @param array The array to flatten.
* @return `array` flattened.
**/
flatten<T>(array: MaybeNestedList<T>): T[];
/**
* Flattens a nested array. If isDeep is true the array is recursively flattened, otherwise it is only
* Flattens a nested array. If isDeep is true the array is recursively flattened, otherwise its only
* flattened a single level.
*
* If you know whether or not this should be recursively at compile time, you typically want to use a
* version without a boolean parameter (i.e. `_.flatten(x)` or `_.flattenDeep(x)`).
*
* @param array The array to flatten.
* @param deep Specify a deep flatten.
* @return `array` flattened.
**/
flatten<T>(array: RecursiveList<T>, isDeep: boolean): List<T> | RecursiveList<T>;
* @param isDeep Specify a deep flatten.
* @return Returns the new flattened array.
*/
flatten<T>(array: ListOfRecursiveArraysOrValues<T>, isDeep: boolean): T[];
/**
* @see _.flatten
*/
flatten<T>(array: List<T|T[]>): T[];
/**
* @see _.flatten
*/
flatten<T>(array: ListOfRecursiveArraysOrValues<T>): RecursiveArray<T>;
}
interface LoDashImplicitWrapper<T> {
/**
* @see _.flatten
*/
flatten(): LoDashImplicitArrayWrapper<string>;
}
interface LoDashImplicitArrayWrapper<T> {
/**
* @see _.flatten
**/
flatten<T>(): LoDashImplicitArrayWrapper<any>;
*/
flatten<TResult>(isDeep?: boolean): LoDashImplicitArrayWrapper<TResult>;
}
interface LoDashImplicitObjectWrapper<T> {
/**
* @see _.flatten
**/
flatten<T>(isShallow: boolean): LoDashImplicitArrayWrapper<any>;
*/
flatten<TResult>(isDeep?: boolean): LoDashImplicitArrayWrapper<TResult>;
}
interface LoDashExplicitWrapper<T> {
/**
* @see _.flatten
*/
flatten(): LoDashExplicitArrayWrapper<string>;
}
interface LoDashExplicitArrayWrapper<T> {
/**
* @see _.flatten
*/
flatten<TResult>(isDeep?: boolean): LoDashExplicitArrayWrapper<TResult>;
}
interface LoDashExplicitObjectWrapper<T> {
/**
* @see _.flatten
*/
flatten<TResult>(isDeep?: boolean): LoDashExplicitArrayWrapper<TResult>;
}
//_.flattenDeep
@@ -1189,17 +1214,14 @@ declare module _ {
* @param array The array to recursively flatten.
* @return Returns the new flattened array.
*/
flattenDeep<T>(array: RecursiveArray<T>): T[];
/**
* @see _.flattenDeep
*/
flattenDeep<T>(array: ListOfRecursiveArraysOrValues<T>): T[];
}
interface LoDashImplicitWrapper<T> {
/**
* @see _.flattenDeep
*/
flattenDeep<T>(array: RecursiveList<T>): any[];
flattenDeep(): LoDashImplicitArrayWrapper<string>;
}
interface LoDashImplicitArrayWrapper<T> {
@@ -1216,6 +1238,13 @@ declare module _ {
flattenDeep<T>(): LoDashImplicitArrayWrapper<T>;
}
interface LoDashExplicitWrapper<T> {
/**
* @see _.flattenDeep
*/
flattenDeep(): LoDashExplicitArrayWrapper<string>;
}
interface LoDashExplicitArrayWrapper<T> {
/**
* @see _.flattenDeep