Lodash: add support for user-defined type guards to overSome and overEvery (#40247)

* Lodash: add support for user-defined type guards to `overSome` and `overEvery`

* Improve example
This commit is contained in:
Oliver Joseph Ash
2019-11-15 11:12:23 -08:00
committed by Pranav Senthilnathan
parent 92b0415393
commit e4b9d77045
3 changed files with 23 additions and 0 deletions
+8
View File
@@ -968,6 +968,10 @@ declare module "../index" {
* @param predicates The predicates to check.
* @return Returns the new function.
*/
overEvery<T, Result1 extends T, Result2 extends T>(
a: (arg: T) => arg is Result1,
b: (arg: T) => arg is Result2
): (arg: T) => Result1 & Result2;
overEvery<T>(...predicates: Array<Many<(...args: T[]) => boolean>>): (...args: T[]) => boolean;
}
@@ -995,6 +999,10 @@ declare module "../index" {
* @param predicates The predicates to check.
* @return Returns the new function.
*/
overSome<T, Result1 extends T, Result2 extends T>(
a: (arg: T) => arg is Result1,
b: (arg: T) => arg is Result2
): (arg: T) => Result1 | Result2;
overSome<T>(...predicates: Array<Many<(...args: T[]) => boolean>>): (...args: T[]) => boolean;
}
+7
View File
@@ -6841,6 +6841,11 @@ fp.now(); // $ExpectType number
// _.overEvery
// _.overSome
{
const userDefinedTypeGuard1: (item: object) => item is { a: 1 } = anything;
const userDefinedTypeGuard2: (item: object) => item is { b: 1 } = anything;
_.overEvery(userDefinedTypeGuard1, userDefinedTypeGuard2); // $ExpectType (arg: object) => { a: 1; } & { b: 1; }
_.overEvery((number: number) => true); // $ExpectType (...args: number[]) => boolean
_.overEvery((number: number) => true, (number: number) => true); // $ExpectType (...args: number[]) => boolean
_.overEvery([(number: number) => true]); // $ExpectType (...args: number[]) => boolean
@@ -6857,6 +6862,8 @@ fp.now(); // $ExpectType number
fp.overEvery((number: number) => true); // $ExpectType (...args: number[]) => boolean
fp.overEvery([(number: number) => true, (number: number) => true]); // $ExpectType (...args: number[]) => boolean
_.overSome(userDefinedTypeGuard1, userDefinedTypeGuard2); // $ExpectType (arg: object) => { a: 1; } | { b: 1; }
_.overSome((number: number) => true); // $ExpectType (...args: number[]) => boolean
_.overSome((number: number) => true, (number: number) => true); // $ExpectType (...args: number[]) => boolean
_.overSome([(number: number) => true]); // $ExpectType (...args: number[]) => boolean
+8
View File
@@ -752,6 +752,10 @@ declare module "../index" {
* @param predicates The predicates to check.
* @return Returns the new function.
*/
overEvery<T, Result1 extends T, Result2 extends T>(...predicates: [
(arg: T) => arg is Result1,
(arg: T) => arg is Result2
]): (arg: T) => Result1 & Result2;
overEvery<T>(...predicates: Array<Many<(...args: T[]) => boolean>>): (...args: T[]) => boolean;
}
interface Collection<T> {
@@ -787,6 +791,10 @@ declare module "../index" {
* @param predicates The predicates to check.
* @return Returns the new function.
*/
overSome<T, Result1 extends T, Result2 extends T>(...predicates: [
(arg: T) => arg is Result1,
(arg: T) => arg is Result2
]): (arg: T) => Result1 | Result2;
overSome<T>(...predicates: Array<Many<(...args: T[]) => boolean>>): (...args: T[]) => boolean;
}
interface Collection<T> {