diff --git a/lodash/lodash-tests.ts b/lodash/lodash-tests.ts index 77a20e2e2..56cf02927 100644 --- a/lodash/lodash-tests.ts +++ b/lodash/lodash-tests.ts @@ -632,68 +632,179 @@ module TestFirst { result = _(list).first(); } -result = >_.flatten([[1, 2], [3, 4]]); -result = >_.flatten([[1, 2], [3, 4], 5, 6]); -result = >>>_.flatten([1, [2], [3, [[4]]]]); +// _.flatten +module TestFlatten { + { + let result: string[]; -result = >_.flatten([1, [2], [[3]]], true); -result = >_.flatten([1, [2], [3, [[4]]]], true); -result = >_.flatten([1, [2], [3, [[false]]]], true); + result = _.flatten('abc'); + } -result = <_.LoDashImplicitArrayWrapper>_([[1, 2], [3, 4], 5, 6]).flatten(); -result = <_.LoDashImplicitArrayWrapper>>>_([1, [2], [3, [[4]]]]).flatten(); + { + let result: number[]; -result = <_.LoDashImplicitArrayWrapper>_([1, [2], [3, [[4]]]]).flatten(true); + result = _.flatten([1, 2, 3]); + result = _.flatten([1, [2, 3]]); + result = _.flatten([1, [2, [3]]], true); + result = _.flatten([1, [2, [3]], [[4]]], true); + + result = _.flatten({0: 1, 1: 2, 2: 3, length: 3}); + result = _.flatten({0: 1, 1: [2, 3], length: 2}); + result = _.flatten({0: 1, 1: [2, [3]], length: 2}, true); + result = _.flatten({0: 1, 1: [2, [3]], 2: [[4]], length: 3}, true); + } + + { + let result: _.RecursiveArray; + + result = _.flatten([1, [2, [3]]]); + result = _.flatten([1, [2, [3]], [[4]]]); + + result = _.flatten({0: 1, 1: [2, [3]], length: 2}); + result = _.flatten({0: 1, 1: [2, [3]], 2: [[4]], length: 3}); + } + + { + let result: _.LoDashImplicitArrayWrapper; + + result = _('abc').flatten(); + } + + { + let result: _.LoDashImplicitArrayWrapper; + + result = _([1, 2, 3]).flatten(); + result = _([1, [2, 3]]).flatten(); + result = _([1, [2, [3]]]).flatten(true); + result = _([1, [2, [3]], [[4]]]).flatten(true); + + result = _({0: 1, 1: 2, 2: 3, length: 3}).flatten(); + result = _({0: 1, 1: [2, 3], length: 2}).flatten(); + result = _({0: 1, 1: [2, [3]], length: 2}).flatten(true); + result = _({0: 1, 1: [2, [3]], 2: [[4]], length: 3}).flatten(true); + } + + { + let result: _.LoDashImplicitArrayWrapper; + + result = _([1, [2, [3]]]).flatten(); + result = _([1, [2, [3]], [[4]]]).flatten(); + + result = _({0: 1, 1: [2, [3]], length: 2}).flatten(); + result = _({0: 1, 1: [2, [3]], 2: [[4]], length: 3}).flatten(); + } + + { + let result: _.LoDashExplicitArrayWrapper; + + result = _('abc').chain().flatten(); + } + + { + let result: _.LoDashExplicitArrayWrapper; + + result = _([1, 2, 3]).chain().flatten(); + result = _([1, [2, 3]]).chain().flatten(); + result = _([1, [2, [3]]]).chain().flatten(true); + result = _([1, [2, [3]], [[4]]]).chain().flatten(true); + + result = _({0: 1, 1: 2, 2: 3, length: 3}).chain().flatten(); + result = _({0: 1, 1: [2, 3], length: 2}).chain().flatten(); + result = _({0: 1, 1: [2, [3]], length: 2}).chain().flatten(true); + result = _({0: 1, 1: [2, [3]], 2: [[4]], length: 3}).chain().flatten(true); + } + + { + let result: _.LoDashExplicitArrayWrapper; + + result = _([1, [2, [3]]]).chain().flatten(); + result = _([1, [2, [3]], [[4]]]).chain().flatten(); + + result = _({0: 1, 1: [2, [3]], length: 2}).chain().flatten(); + result = _({0: 1, 1: [2, [3]], 2: [[4]], length: 3}).chain().flatten(); + } +} // _.flattenDeep module TestFlattenDeep { - interface RecursiveArray extends Array> {} - interface ListOfRecursiveArraysOrValues extends _.List> {} - interface RecursiveList extends _.List> { } - - let recursiveArray: RecursiveArray; - let listOfMaybeRecursiveArraysOrValues: ListOfRecursiveArraysOrValues; - let recursiveList: RecursiveList; - { - let result: TResult[]; + let result: string[]; - result = _.flattenDeep(recursiveArray); - result = _.flattenDeep(listOfMaybeRecursiveArraysOrValues); + result = _.flattenDeep('abc'); } { - let result: any[]; + let result: number[]; - result = _.flattenDeep(recursiveList); + result = _.flattenDeep([1, 2, 3]); + result = _.flattenDeep([1, [2, 3]]); + result = _.flattenDeep([1, [2, [3]]]); + result = _.flattenDeep([1, [2, [3]], [[4]]]); + + result = _.flattenDeep({0: 1, 1: 2, 2: 3, length: 3}); + result = _.flattenDeep({0: 1, 1: [2, 3], length: 2}); + result = _.flattenDeep({0: 1, 1: [2, [3]], length: 2}); + result = _.flattenDeep({0: 1, 1: [2, [3]], 2: [[4]], length: 3}); } { - let result: _.LoDashImplicitArrayWrapper; + let result: _.LoDashImplicitArrayWrapper; - result = _(recursiveArray).flattenDeep(); - - result = _(listOfMaybeRecursiveArraysOrValues).flattenDeep(); + result = _('abc').flattenDeep(); } { - let result: _.LoDashImplicitArrayWrapper; + let result: _.LoDashImplicitArrayWrapper; - result = _(recursiveList).flattenDeep(); + result = _([1, 2, 3]).flattenDeep(); + result = _([1, [2, 3]]).flattenDeep(); + result = _([1, [2, [3]]]).flattenDeep(); + result = _([1, [2, [3]], [[4]]]).flattenDeep(); + + result = _({0: 1, 1: 2, 2: 3, length: 3}).flattenDeep(); + result = _({0: 1, 1: [2, 3], length: 2}).flattenDeep(); + result = _({0: 1, 1: [2, [3]], length: 2}).flattenDeep(); + result = _({0: 1, 1: [2, [3]], 2: [[4]], length: 3}).flattenDeep(); } { - let result: _.LoDashExplicitArrayWrapper; + let result: _.LoDashImplicitArrayWrapper; - result = _(recursiveArray).chain().flattenDeep(); + result = _([1, [2, [3]]]).flattenDeep(); + result = _([1, [2, [3]], [[4]]]).flattenDeep(); - result = _(listOfMaybeRecursiveArraysOrValues).chain().flattenDeep(); + result = _({0: 1, 1: [2, [3]], length: 2}).flattenDeep(); + result = _({0: 1, 1: [2, [3]], 2: [[4]], length: 3}).flattenDeep(); } { - let result: _.LoDashExplicitArrayWrapper; + let result: _.LoDashExplicitArrayWrapper; - result = _(recursiveList).chain().flattenDeep(); + result = _('abc').chain().flattenDeep(); + } + + { + let result: _.LoDashExplicitArrayWrapper; + + result = _([1, 2, 3]).chain().flattenDeep(); + result = _([1, [2, 3]]).chain().flattenDeep(); + result = _([1, [2, [3]]]).chain().flattenDeep(); + result = _([1, [2, [3]], [[4]]]).chain().flattenDeep(); + + result = _({0: 1, 1: 2, 2: 3, length: 3}).chain().flattenDeep(); + result = _({0: 1, 1: [2, 3], length: 2}).chain().flattenDeep(); + result = _({0: 1, 1: [2, [3]], length: 2}).chain().flattenDeep(); + result = _({0: 1, 1: [2, [3]], 2: [[4]], length: 3}).chain().flattenDeep(); + } + + { + let result: _.LoDashExplicitArrayWrapper; + + result = _([1, [2, [3]]]).chain().flattenDeep(); + result = _([1, [2, [3]], [[4]]]).chain().flattenDeep(); + + result = _({0: 1, 1: [2, [3]], length: 2}).chain().flattenDeep(); + result = _({0: 1, 1: [2, [3]], 2: [[4]], length: 3}).chain().flattenDeep(); } } diff --git a/lodash/lodash.d.ts b/lodash/lodash.d.ts index c45ec90ee..fe4d58d1d 100644 --- a/lodash/lodash.d.ts +++ b/lodash/lodash.d.ts @@ -1138,47 +1138,72 @@ declare module _ { first(): TResult; } - interface MaybeNestedList extends List> { } - interface RecursiveArray extends Array> { } - interface ListOfRecursiveArraysOrValues extends List> { } - interface RecursiveList extends List> { } + interface RecursiveArray extends Array> {} + interface ListOfRecursiveArraysOrValues extends List> {} //_.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(array: MaybeNestedList): 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 it’s 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(array: RecursiveList, isDeep: boolean): List | RecursiveList; + * @param isDeep Specify a deep flatten. + * @return Returns the new flattened array. + */ + flatten(array: ListOfRecursiveArraysOrValues, isDeep: boolean): T[]; + + /** + * @see _.flatten + */ + flatten(array: List): T[]; + + /** + * @see _.flatten + */ + flatten(array: ListOfRecursiveArraysOrValues): RecursiveArray; + } + + interface LoDashImplicitWrapper { + /** + * @see _.flatten + */ + flatten(): LoDashImplicitArrayWrapper; } interface LoDashImplicitArrayWrapper { /** * @see _.flatten - **/ - flatten(): LoDashImplicitArrayWrapper; + */ + flatten(isDeep?: boolean): LoDashImplicitArrayWrapper; + } + interface LoDashImplicitObjectWrapper { /** * @see _.flatten - **/ - flatten(isShallow: boolean): LoDashImplicitArrayWrapper; + */ + flatten(isDeep?: boolean): LoDashImplicitArrayWrapper; + } + + interface LoDashExplicitWrapper { + /** + * @see _.flatten + */ + flatten(): LoDashExplicitArrayWrapper; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.flatten + */ + flatten(isDeep?: boolean): LoDashExplicitArrayWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.flatten + */ + flatten(isDeep?: boolean): LoDashExplicitArrayWrapper; } //_.flattenDeep @@ -1189,17 +1214,14 @@ declare module _ { * @param array The array to recursively flatten. * @return Returns the new flattened array. */ - flattenDeep(array: RecursiveArray): T[]; - - /** - * @see _.flattenDeep - */ flattenDeep(array: ListOfRecursiveArraysOrValues): T[]; + } + interface LoDashImplicitWrapper { /** * @see _.flattenDeep */ - flattenDeep(array: RecursiveList): any[]; + flattenDeep(): LoDashImplicitArrayWrapper; } interface LoDashImplicitArrayWrapper { @@ -1216,6 +1238,13 @@ declare module _ { flattenDeep(): LoDashImplicitArrayWrapper; } + interface LoDashExplicitWrapper { + /** + * @see _.flattenDeep + */ + flattenDeep(): LoDashExplicitArrayWrapper; + } + interface LoDashExplicitArrayWrapper { /** * @see _.flattenDeep