diff --git a/lodash/lodash-tests.ts b/lodash/lodash-tests.ts index 506aac21f1..f1c04cb4fe 100644 --- a/lodash/lodash-tests.ts +++ b/lodash/lodash-tests.ts @@ -1483,70 +1483,87 @@ module TestSortedLastIndex { let result: number; result = _.sortedLastIndex('', ''); - result = _.sortedLastIndex('', '', stringIterator); - result = _.sortedLastIndex('', '', stringIterator, any); - result = _.sortedLastIndex('', '', stringIterator); - result = _.sortedLastIndex('', '', stringIterator, any); result = _.sortedLastIndex(array, value); - result = _.sortedLastIndex(array, value, arrayIterator); - result = _.sortedLastIndex(array, value, arrayIterator, any); - result = _.sortedLastIndex(array, value, ''); - result = _.sortedLastIndex(array, value, {a: 42}); - result = _.sortedLastIndex(array, value, arrayIterator); - result = _.sortedLastIndex(array, value, arrayIterator, any); - result = _.sortedLastIndex<{a: number}, SampleType>(array, value, {a: 42}); result = _.sortedLastIndex(list, value); - result = _.sortedLastIndex(list, value, listIterator); - result = _.sortedLastIndex(list, value, listIterator, any); - result = _.sortedLastIndex(list, value, ''); - result = _.sortedLastIndex(list, value, {a: 42}); - result = _.sortedLastIndex(list, value, listIterator); - result = _.sortedLastIndex(list, value, listIterator, any); - result = _.sortedLastIndex<{a: number}, SampleType>(list, value, {a: 42}); result = _('').sortedLastIndex(''); - result = _('').sortedLastIndex('', stringIterator); - result = _('').sortedLastIndex('', stringIterator, any); result = _(array).sortedLastIndex(value); - result = _(array).sortedLastIndex(value, arrayIterator); - result = _(array).sortedLastIndex(value, arrayIterator, any); - result = _(array).sortedLastIndex(value, ''); - result = _(array).sortedLastIndex<{a: number}>(value, {a: 42}); result = _(list).sortedLastIndex(value); - result = _(list).sortedLastIndex(value, listIterator); - result = _(list).sortedLastIndex(value, listIterator, any); - result = _(list).sortedLastIndex(value, ''); - result = _(list).sortedLastIndex(value, {a: 42}); - result = _(list).sortedLastIndex(value, listIterator); - result = _(list).sortedLastIndex(value, listIterator, any); - result = _(list).sortedLastIndex<{a: number}, SampleType>(value, {a: 42}); } { let result: _.LoDashExplicitWrapper; result = _('').chain().sortedLastIndex(''); - result = _('').chain().sortedLastIndex('', stringIterator); - result = _('').chain().sortedLastIndex('', stringIterator, any); result = _(array).chain().sortedLastIndex(value); - result = _(array).chain().sortedLastIndex(value, arrayIterator); - result = _(array).chain().sortedLastIndex(value, arrayIterator, any); - result = _(array).chain().sortedLastIndex(value, ''); - result = _(array).chain().sortedLastIndex<{a: number}>(value, {a: 42}); result = _(list).chain().sortedLastIndex(value); - result = _(list).chain().sortedLastIndex(value, listIterator); - result = _(list).chain().sortedLastIndex(value, listIterator, any); - result = _(list).chain().sortedLastIndex(value, ''); - result = _(list).chain().sortedLastIndex(value, {a: 42}); - result = _(list).chain().sortedLastIndex(value, listIterator); - result = _(list).chain().sortedLastIndex(value, listIterator, any); - result = _(list).chain().sortedLastIndex<{a: number}, SampleType>(value, {a: 42}); + } +} + +// _.sortedLastIndexBy +module TestSortedLastIndexBy { + type SampleType = {a: number; b: string; c: boolean;}; + + let array: SampleType[]; + let list: _.List; + + let value: SampleType; + + let stringIterator: (x: string) => number; + let arrayIterator: (x: SampleType) => number; + let listIterator: (x: SampleType) => number; + + { + let result: number; + + result = _.sortedLastIndexBy('', '', stringIterator); + result = _.sortedLastIndexBy('', '', stringIterator); + + result = _.sortedLastIndexBy(array, value, arrayIterator); + result = _.sortedLastIndexBy(array, value, ''); + result = _.sortedLastIndexBy(array, value, {a: 42}); + result = _.sortedLastIndexBy(array, value, arrayIterator); + result = _.sortedLastIndexBy<{a: number}, SampleType>(array, value, {a: 42}); + + result = _.sortedLastIndexBy(list, value, listIterator); + result = _.sortedLastIndexBy(list, value, ''); + result = _.sortedLastIndexBy(list, value, {a: 42}); + result = _.sortedLastIndexBy(list, value, listIterator); + result = _.sortedLastIndexBy<{a: number}, SampleType>(list, value, {a: 42}); + + result = _('').sortedLastIndexBy('', stringIterator); + + result = _(array).sortedLastIndexBy(value, arrayIterator); + result = _(array).sortedLastIndexBy(value, ''); + result = _(array).sortedLastIndexBy<{a: number}>(value, {a: 42}); + + result = _(list).sortedLastIndexBy(value, listIterator); + result = _(list).sortedLastIndexBy(value, ''); + result = _(list).sortedLastIndexBy(value, {a: 42}); + result = _(list).sortedLastIndexBy(value, listIterator); + result = _(list).sortedLastIndexBy<{a: number}, SampleType>(value, {a: 42}); + } + + { + let result: _.LoDashExplicitWrapper; + + result = _('').chain().sortedLastIndexBy('', stringIterator); + + result = _(array).chain().sortedLastIndexBy(value, arrayIterator); + result = _(array).chain().sortedLastIndexBy(value, ''); + result = _(array).chain().sortedLastIndexBy<{a: number}>(value, {a: 42}); + + result = _(list).chain().sortedLastIndexBy(value, listIterator); + result = _(list).chain().sortedLastIndexBy(value, ''); + result = _(list).chain().sortedLastIndexBy(value, {a: 42}); + result = _(list).chain().sortedLastIndexBy(value, listIterator); + result = _(list).chain().sortedLastIndexBy<{a: number}, SampleType>(value, {a: 42}); } } diff --git a/lodash/lodash.d.ts b/lodash/lodash.d.ts index 03eb0b2d13..43542ec897 100644 --- a/lodash/lodash.d.ts +++ b/lodash/lodash.d.ts @@ -33,7 +33,7 @@ TODO: - [x] Split _.omit & _.pick into _.omitBy & _.pickBy - [x] Split _.sample into _.sampleSize - [x] Split _.sortedIndex into _.sortedIndexBy -- [ ] Split _.sortedLastIndex into _.sortedLastIndexBy +- [x] Split _.sortedLastIndex into _.sortedLastIndexBy - [ ] Split _.uniq into _.sortedUniq, _.sortedUniqBy, & _.uniqBy - [ ] Absorbed _.sortByAll into _.sortBy @@ -2517,20 +2517,24 @@ declare module _ { //_.sortedLastIndex interface LoDashStatic { /** - * This method is like _.sortedIndex except that it returns the highest index at which value should be - * inserted into array in order to maintain its sort order. + * This method is like `_.sortedIndex` except that it returns the highest + * index at which `value` should be inserted into `array` in order to + * maintain its sort order. * - * @param array The sorted array to inspect. - * @param value The value to evaluate. - * @param iteratee The function invoked per iteration. - * @param thisArg The this binding of iteratee. - * @return Returns the index at which value should be inserted into array. + * @static + * @memberOf _ + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @returns {number} Returns the index at which `value` should be inserted into `array`. + * @example + * + * _.sortedLastIndex([4, 5], 4); + * // => 1 */ sortedLastIndex( array: List, - value: T, - iteratee?: (x: T) => TSort, - thisArg?: any + value: T ): number; /** @@ -2538,9 +2542,7 @@ declare module _ { */ sortedLastIndex( array: List, - value: T, - iteratee?: (x: T) => any, - thisArg?: any + value: T ): number; /** @@ -2548,8 +2550,7 @@ declare module _ { */ sortedLastIndex( array: List, - value: T, - iteratee: string + value: T ): number; /** @@ -2557,8 +2558,7 @@ declare module _ { */ sortedLastIndex( array: List, - value: T, - iteratee: W + value: T ): number; /** @@ -2566,8 +2566,7 @@ declare module _ { */ sortedLastIndex( array: List, - value: T, - iteratee: Object + value: T ): number; } @@ -2576,9 +2575,7 @@ declare module _ { * @see _.sortedLastIndex */ sortedLastIndex( - value: string, - iteratee?: (x: string) => TSort, - thisArg?: any + value: string ): number; } @@ -2587,25 +2584,21 @@ declare module _ { * @see _.sortedLastIndex */ sortedLastIndex( - value: T, - iteratee?: (x: T) => TSort, - thisArg?: any + value: T ): number; /** * @see _.sortedLastIndex */ sortedLastIndex( - value: T, - iteratee: string + value: T ): number; /** * @see _.sortedLastIndex */ sortedLastIndex( - value: T, - iteratee: W + value: T ): number; } @@ -2614,42 +2607,21 @@ declare module _ { * @see _.sortedLastIndex */ sortedLastIndex( - value: T, - iteratee?: (x: T) => TSort, - thisArg?: any + value: T ): number; /** * @see _.sortedLastIndex */ sortedLastIndex( - value: T, - iteratee?: (x: T) => any, - thisArg?: any - ): number; - - /** - * @see _.sortedLastIndex - */ - sortedLastIndex( - value: T, - iteratee: string + value: T ): number; /** * @see _.sortedLastIndex */ sortedLastIndex( - value: T, - iteratee: W - ): number; - - /** - * @see _.sortedLastIndex - */ - sortedLastIndex( - value: T, - iteratee: Object + value: T ): number; } @@ -2658,9 +2630,7 @@ declare module _ { * @see _.sortedLastIndex */ sortedLastIndex( - value: string, - iteratee?: (x: string) => TSort, - thisArg?: any + value: string ): LoDashExplicitWrapper; } @@ -2669,25 +2639,14 @@ declare module _ { * @see _.sortedLastIndex */ sortedLastIndex( - value: T, - iteratee?: (x: T) => TSort, - thisArg?: any + value: T ): LoDashExplicitWrapper; /** * @see _.sortedLastIndex */ sortedLastIndex( - value: T, - iteratee: string - ): LoDashExplicitWrapper; - - /** - * @see _.sortedLastIndex - */ - sortedLastIndex( - value: T, - iteratee: W + value: T ): LoDashExplicitWrapper; } @@ -2696,40 +2655,238 @@ declare module _ { * @see _.sortedLastIndex */ sortedLastIndex( - value: T, - iteratee?: (x: T) => TSort, - thisArg?: any + value: T ): LoDashExplicitWrapper; /** * @see _.sortedLastIndex */ sortedLastIndex( - value: T, - iteratee?: (x: T) => any, - thisArg?: any - ): LoDashExplicitWrapper; - - /** - * @see _.sortedLastIndex - */ - sortedLastIndex( - value: T, - iteratee: string + value: T ): LoDashExplicitWrapper; /** * @see _.sortedLastIndex */ sortedLastIndex( + value: T + ): LoDashExplicitWrapper; + } + + //_.sortedLastIndexBy + interface LoDashStatic { + /** + * This method is like `_.sortedLastIndex` except that it accepts `iteratee` + * which is invoked for `value` and each element of `array` to compute their + * sort ranking. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function|Object|string} [iteratee=_.identity] The iteratee invoked per element. + * @returns {number} Returns the index at which `value` should be inserted into `array`. + * @example + * + * // using the `_.property` iteratee shorthand + * _.sortedLastIndexBy([{ 'x': 4 }, { 'x': 5 }], { 'x': 4 }, 'x'); + * // => 1 + */ + sortedLastIndexBy( + array: List, + value: T, + iteratee: (x: T) => TSort + ): number; + + /** + * @see _.sortedLastIndexBy + */ + sortedLastIndexBy( + array: List, + value: T, + iteratee: (x: T) => any + ): number; + + /** + * @see _.sortedLastIndexBy + */ + sortedLastIndexBy( + array: List, + value: T, + iteratee: string + ): number; + + /** + * @see _.sortedLastIndexBy + */ + sortedLastIndexBy( + array: List, + value: T, + iteratee: W + ): number; + + /** + * @see _.sortedLastIndexBy + */ + sortedLastIndexBy( + array: List, + value: T, + iteratee: Object + ): number; + } + + interface LoDashImplicitWrapper { + /** + * @see _.sortedLastIndexBy + */ + sortedLastIndexBy( + value: string, + iteratee: (x: string) => TSort + ): number; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.sortedLastIndexBy + */ + sortedLastIndexBy( + value: T, + iteratee: (x: T) => TSort + ): number; + + /** + * @see _.sortedLastIndexBy + */ + sortedLastIndexBy( + value: T, + iteratee: string + ): number; + + /** + * @see _.sortedLastIndexBy + */ + sortedLastIndexBy( + value: T, + iteratee: W + ): number; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.sortedLastIndexBy + */ + sortedLastIndexBy( + value: T, + iteratee: (x: T) => TSort + ): number; + + /** + * @see _.sortedLastIndexBy + */ + sortedLastIndexBy( + value: T, + iteratee: (x: T) => any + ): number; + + /** + * @see _.sortedLastIndexBy + */ + sortedLastIndexBy( + value: T, + iteratee: string + ): number; + + /** + * @see _.sortedLastIndexBy + */ + sortedLastIndexBy( + value: T, + iteratee: W + ): number; + + /** + * @see _.sortedLastIndexBy + */ + sortedLastIndexBy( + value: T, + iteratee: Object + ): number; + } + + interface LoDashExplicitWrapper { + /** + * @see _.sortedLastIndexBy + */ + sortedLastIndexBy( + value: string, + iteratee: (x: string) => TSort + ): LoDashExplicitWrapper; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.sortedLastIndexBy + */ + sortedLastIndexBy( + value: T, + iteratee: (x: T) => TSort + ): LoDashExplicitWrapper; + + /** + * @see _.sortedLastIndexBy + */ + sortedLastIndexBy( + value: T, + iteratee: string + ): LoDashExplicitWrapper; + + /** + * @see _.sortedLastIndexBy + */ + sortedLastIndexBy( + value: T, + iteratee: W + ): LoDashExplicitWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.sortedLastIndexBy + */ + sortedLastIndexBy( + value: T, + iteratee: (x: T) => TSort + ): LoDashExplicitWrapper; + + /** + * @see _.sortedLastIndexBy + */ + sortedLastIndexBy( + value: T, + iteratee: (x: T) => any + ): LoDashExplicitWrapper; + + /** + * @see _.sortedLastIndexBy + */ + sortedLastIndexBy( + value: T, + iteratee: string + ): LoDashExplicitWrapper; + + /** + * @see _.sortedLastIndexBy + */ + sortedLastIndexBy( value: T, iteratee: W ): LoDashExplicitWrapper; /** - * @see _.sortedLastIndex + * @see _.sortedLastIndexBy */ - sortedLastIndex( + sortedLastIndexBy( value: T, iteratee: Object ): LoDashExplicitWrapper;