diff --git a/types/bluebird/bluebird-tests.ts b/types/bluebird/bluebird-tests.ts index b9fc8d0cef..c8fab7d57e 100644 --- a/types/bluebird/bluebird-tests.ts +++ b/types/bluebird/bluebird-tests.ts @@ -361,6 +361,22 @@ fooProm = fooProm.catch(CustomError, reason => { // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +{ + class CustomError1 extends Error {} + class CustomError2 extends Error {} + class CustomError3 extends Error {} + class CustomError4 extends Error {} + class CustomError5 extends Error {} + + fooProm = fooProm.catch(CustomError1, error => {}); + fooProm = fooProm.catch(CustomError1, CustomError2, error => {}); + fooProm = fooProm.catch(CustomError1, CustomError2, CustomError3, error => {}); + fooProm = fooProm.catch(CustomError1, CustomError2, CustomError3, CustomError4, error => {}); + fooProm = fooProm.catch(CustomError1, CustomError2, CustomError3, CustomError4, CustomError5, error => {}); +} + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + barProm = fooProm.error((reason: any) => { return bar; }); diff --git a/types/bluebird/index.d.ts b/types/bluebird/index.d.ts index 49cd47d7bd..5d1d5cfc81 100644 --- a/types/bluebird/index.d.ts +++ b/types/bluebird/index.d.ts @@ -65,24 +65,133 @@ declare class Bluebird implements Bluebird.Thenable, Bluebird.Inspection boolean, onReject: (error: any) => R | Bluebird.Thenable | void | Bluebird.Thenable): Bluebird; - caught(predicate: (error: any) => boolean, onReject: (error: any) => R | Bluebird.Thenable | void | Bluebird.Thenable): Bluebird; + catch( + filter1: (new (...args: any[]) => E1) | ((error: any) => boolean) | Object, + filter2: (new (...args: any[]) => E2) | ((error: any) => boolean) | Object, + filter3: (new (...args: any[]) => E3) | ((error: any) => boolean) | Object, + filter4: (new (...args: any[]) => E4) | ((error: any) => boolean) | Object, + filter5: (new (...args: any[]) => E5) | ((error: any) => boolean) | Object, + onReject: (error: E1 | E2 | E3 | E4 | E5) => R | Bluebird.Thenable | void | Bluebird.Thenable, + ): Bluebird; + caught( + filter1: (new (...args: any[]) => E1) | ((error: any) => boolean) | Object, + filter2: (new (...args: any[]) => E2) | ((error: any) => boolean) | Object, + filter3: (new (...args: any[]) => E3) | ((error: any) => boolean) | Object, + filter4: (new (...args: any[]) => E4) | ((error: any) => boolean) | Object, + filter5: (new (...args: any[]) => E5) | ((error: any) => boolean) | Object, + onReject: (error: E1 | E2 | E3 | E4 | E5) => R | Bluebird.Thenable | void | Bluebird.Thenable, + ): Bluebird; + catch( + filter1: (new (...args: any[]) => E1) | ((error: any) => boolean) | Object, + filter2: (new (...args: any[]) => E2) | ((error: any) => boolean) | Object, + filter3: (new (...args: any[]) => E3) | ((error: any) => boolean) | Object, + filter4: (new (...args: any[]) => E4) | ((error: any) => boolean) | Object, + filter5: (new (...args: any[]) => E5) | ((error: any) => boolean) | Object, + onReject: (error: E1 | E2 | E3 | E4 | E5) => U | Bluebird.Thenable, + ): Bluebird; + caught( + filter1: (new (...args: any[]) => E1) | ((error: any) => boolean) | Object, + filter2: (new (...args: any[]) => E2) | ((error: any) => boolean) | Object, + filter3: (new (...args: any[]) => E3) | ((error: any) => boolean) | Object, + filter4: (new (...args: any[]) => E4) | ((error: any) => boolean) | Object, + filter5: (new (...args: any[]) => E5) | ((error: any) => boolean) | Object, + onReject: (error: E1 | E2 | E3 | E4 | E5) => U | Bluebird.Thenable, + ): Bluebird; - catch(predicate: (error: any) => boolean, onReject: (error: any) => U | Bluebird.Thenable): Bluebird; - caught(predicate: (error: any) => boolean, onReject: (error: any) => U | Bluebird.Thenable): Bluebird; + catch( + filter1: (new (...args: any[]) => E1) | ((error: any) => boolean) | Object, + filter2: (new (...args: any[]) => E2) | ((error: any) => boolean) | Object, + filter3: (new (...args: any[]) => E3) | ((error: any) => boolean) | Object, + filter4: (new (...args: any[]) => E4) | ((error: any) => boolean) | Object, + onReject: (error: E1 | E2 | E3 | E4) => R | Bluebird.Thenable | void | Bluebird.Thenable, + ): Bluebird; + caught( + filter1: (new (...args: any[]) => E1) | ((error: any) => boolean) | Object, + filter2: (new (...args: any[]) => E2) | ((error: any) => boolean) | Object, + filter3: (new (...args: any[]) => E3) | ((error: any) => boolean) | Object, + filter4: (new (...args: any[]) => E4) | ((error: any) => boolean) | Object, + onReject: (error: E1 | E2 | E3 | E4) => R | Bluebird.Thenable | void | Bluebird.Thenable, + ): Bluebird; + catch( + filter1: (new (...args: any[]) => E1) | ((error: any) => boolean) | Object, + filter2: (new (...args: any[]) => E2) | ((error: any) => boolean) | Object, + filter3: (new (...args: any[]) => E3) | ((error: any) => boolean) | Object, + filter4: (new (...args: any[]) => E4) | ((error: any) => boolean) | Object, + onReject: (error: E1 | E2 | E3 | E4) => U | Bluebird.Thenable, + ): Bluebird; + caught( + filter1: (new (...args: any[]) => E1) | ((error: any) => boolean) | Object, + filter2: (new (...args: any[]) => E2) | ((error: any) => boolean) | Object, + filter3: (new (...args: any[]) => E3) | ((error: any) => boolean) | Object, + filter4: (new (...args: any[]) => E4) | ((error: any) => boolean) | Object, + onReject: (error: E1 | E2 | E3 | E4) => U | Bluebird.Thenable, + ): Bluebird; - catch(ErrorClass: new (...args: any[]) => E, onReject: (error: E) => R | Bluebird.Thenable | void | Bluebird.Thenable): Bluebird; - caught(ErrorClass: new (...args: any[]) => E, onReject: (error: E) => R | Bluebird.Thenable | void | Bluebird.Thenable): Bluebird; + catch( + filter1: (new (...args: any[]) => E1) | ((error: any) => boolean) | Object, + filter2: (new (...args: any[]) => E2) | ((error: any) => boolean) | Object, + filter3: (new (...args: any[]) => E3) | ((error: any) => boolean) | Object, + onReject: (error: E1 | E2 | E3) => R | Bluebird.Thenable | void | Bluebird.Thenable, + ): Bluebird; + caught( + filter1: (new (...args: any[]) => E1) | ((error: any) => boolean) | Object, + filter2: (new (...args: any[]) => E2) | ((error: any) => boolean) | Object, + filter3: (new (...args: any[]) => E3) | ((error: any) => boolean) | Object, + onReject: (error: E1 | E2 | E3) => R | Bluebird.Thenable | void | Bluebird.Thenable, + ): Bluebird; + catch( + filter1: (new (...args: any[]) => E1) | ((error: any) => boolean) | Object, + filter2: (new (...args: any[]) => E2) | ((error: any) => boolean) | Object, + filter3: (new (...args: any[]) => E3) | ((error: any) => boolean) | Object, + onReject: (error: E1 | E2 | E3) => U | Bluebird.Thenable, + ): Bluebird; + caught( + filter1: (new (...args: any[]) => E1) | ((error: any) => boolean) | Object, + filter2: (new (...args: any[]) => E2) | ((error: any) => boolean) | Object, + filter3: (new (...args: any[]) => E3) | ((error: any) => boolean) | Object, + onReject: (error: E1 | E2 | E3) => U | Bluebird.Thenable, + ): Bluebird; - catch(ErrorClass: new (...args: any[]) => E, onReject: (error: E) => U | Bluebird.Thenable): Bluebird; - caught(ErrorClass: new (...args: any[]) => E, onReject: (error: E) => U | Bluebird.Thenable): Bluebird; + catch( + filter1: (new (...args: any[]) => E1) | ((error: any) => boolean) | Object, + filter2: (new (...args: any[]) => E2) | ((error: any) => boolean) | Object, + onReject: (error: E1 | E2) => R | Bluebird.Thenable | void | Bluebird.Thenable, + ): Bluebird; + caught( + filter1: (new (...args: any[]) => E1) | ((error: any) => boolean) | Object, + filter2: (new (...args: any[]) => E2) | ((error: any) => boolean) | Object, + onReject: (error: E1 | E2) => R | Bluebird.Thenable | void | Bluebird.Thenable, + ): Bluebird; + catch( + filter1: (new (...args: any[]) => E1) | ((error: any) => boolean) | Object, + filter2: (new (...args: any[]) => E2) | ((error: any) => boolean) | Object, + onReject: (error: E1 | E2) => U | Bluebird.Thenable, + ): Bluebird; + caught( + filter1: (new (...args: any[]) => E1) | ((error: any) => boolean) | Object, + filter2: (new (...args: any[]) => E2) | ((error: any) => boolean) | Object, + onReject: (error: E1 | E2) => U | Bluebird.Thenable, + ): Bluebird; - catch(predicate: Object, onReject: (error: any) => R | Bluebird.Thenable | void | Bluebird.Thenable): Bluebird; - caught(predicate: Object, onReject: (error: any) => R | Bluebird.Thenable | void | Bluebird.Thenable): Bluebird; - - catch(predicate: Object, onReject: (error: any) => U | Bluebird.Thenable): Bluebird; - caught(predicate: Object, onReject: (error: any) => U | Bluebird.Thenable): Bluebird; + catch( + filter1: (new (...args: any[]) => E1) | ((error: any) => boolean) | Object, + onReject: (error: E1) => R | Bluebird.Thenable | void | Bluebird.Thenable, + ): Bluebird; + caught( + filter1: (new (...args: any[]) => E1) | ((error: any) => boolean) | Object, + onReject: (error: E1) => R | Bluebird.Thenable | void | Bluebird.Thenable, + ): Bluebird; + catch( + filter1: (new (...args: any[]) => E1) | ((error: any) => boolean) | Object, + onReject: (error: E1) => U | Bluebird.Thenable, + ): Bluebird; + caught( + filter1: (new (...args: any[]) => E1) | ((error: any) => boolean) | Object, + onReject: (error: E1) => U | Bluebird.Thenable, + ): Bluebird; /** * Like `.catch` but instead of catching all types of exceptions, it only catches those that don't originate from thrown errors but rather from explicit rejections. @@ -116,11 +225,40 @@ declare class Bluebird implements Bluebird.Thenable, Bluebird.Inspection(onReject: (error?: any) => U | Bluebird.Thenable | void | Bluebird.Thenable): Bluebird; - tapCatch(ErrorClass: new (...args: any[]) => E, onReject: (error: E) => U | Bluebird.Thenable | void | Bluebird.Thenable): Bluebird; - tapCatch(predicate: (error?: any) => boolean, onReject: (error?: any) => U | Bluebird.Thenable | void | Bluebird.Thenable): Bluebird; + tapCatch(onReject: (error?: any) => U | Bluebird.Thenable): Bluebird; + tapCatch( + filter1: (new (...args: any[]) => E1) | ((error: any) => boolean) | Object, + filter2: (new (...args: any[]) => E2) | ((error: any) => boolean) | Object, + filter3: (new (...args: any[]) => E3) | ((error: any) => boolean) | Object, + filter4: (new (...args: any[]) => E4) | ((error: any) => boolean) | Object, + filter5: (new (...args: any[]) => E5) | ((error: any) => boolean) | Object, + onReject: (error: E1 | E2 | E3 | E4 | E5) => U | Bluebird.Thenable, + ): Bluebird; + tapCatch( + filter1: (new (...args: any[]) => E1) | ((error: any) => boolean) | Object, + filter2: (new (...args: any[]) => E2) | ((error: any) => boolean) | Object, + filter3: (new (...args: any[]) => E3) | ((error: any) => boolean) | Object, + filter4: (new (...args: any[]) => E4) | ((error: any) => boolean) | Object, + onReject: (error: E1 | E2 | E3 | E4) => U | Bluebird.Thenable, + ): Bluebird; + tapCatch( + filter1: (new (...args: any[]) => E1) | ((error: any) => boolean) | Object, + filter2: (new (...args: any[]) => E2) | ((error: any) => boolean) | Object, + filter3: (new (...args: any[]) => E3) | ((error: any) => boolean) | Object, + onReject: (error: E1 | E2 | E3) => U | Bluebird.Thenable, + ): Bluebird; + tapCatch( + filter1: (new (...args: any[]) => E1) | ((error: any) => boolean) | Object, + filter2: (new (...args: any[]) => E2) | ((error: any) => boolean) | Object, + onReject: (error: E1 | E2) => U | Bluebird.Thenable, + ): Bluebird; + tapCatch( + filter1: (new (...args: any[]) => E1) | ((error: any) => boolean) | Object, + onReject: (error: E1) => U | Bluebird.Thenable, + ): Bluebird; /** * Same as calling `Promise.delay(ms, this)`. @@ -258,11 +396,40 @@ declare class Bluebird implements Bluebird.Thenable, Bluebird.Inspection * * in the case where `value` doesn't change its value. That means `value` is bound at the time of calling `.catchReturn()` + * TODO: disallow non-objects */ catchReturn(value: U): Bluebird; - catchReturn(predicate: (error: any) => boolean, value: U): Bluebird; - catchReturn(ErrorClass: new (...args: any[]) => E, value: U): Bluebird; - catchReturn(predicate: Object, value: U): Bluebird; + + catchReturn( + filter1: (new (...args: any[]) => E1) | ((error: any) => boolean) | Object, + filter2: (new (...args: any[]) => E2) | ((error: any) => boolean) | Object, + filter3: (new (...args: any[]) => E3) | ((error: any) => boolean) | Object, + filter4: (new (...args: any[]) => E4) | ((error: any) => boolean) | Object, + filter5: (new (...args: any[]) => E5) | ((error: any) => boolean) | Object, + value: U, + ): Bluebird; + catchReturn( + filter1: (new (...args: any[]) => E1) | ((error: any) => boolean) | Object, + filter2: (new (...args: any[]) => E2) | ((error: any) => boolean) | Object, + filter3: (new (...args: any[]) => E3) | ((error: any) => boolean) | Object, + filter4: (new (...args: any[]) => E4) | ((error: any) => boolean) | Object, + value: U, + ): Bluebird; + catchReturn( + filter1: (new (...args: any[]) => E1) | ((error: any) => boolean) | Object, + filter2: (new (...args: any[]) => E2) | ((error: any) => boolean) | Object, + filter3: (new (...args: any[]) => E3) | ((error: any) => boolean) | Object, + value: U, + ): Bluebird; + catchReturn( + filter1: (new (...args: any[]) => E1) | ((error: any) => boolean) | Object, + filter2: (new (...args: any[]) => E2) | ((error: any) => boolean) | Object, + value: U, + ): Bluebird; + catchReturn( + filter1: (new (...args: any[]) => E1) | ((error: any) => boolean) | Object, + value: U, + ): Bluebird; /** * Convenience method for: @@ -273,11 +440,40 @@ declare class Bluebird implements Bluebird.Thenable, Bluebird.Inspection * Same limitations apply as with `.catchReturn()`. + * TODO: disallow non-objects */ catchThrow(reason: Error): Bluebird; - catchThrow(predicate: (error: any) => boolean, reason: Error): Bluebird; - catchThrow(ErrorClass: new (...args: any[]) => E, reason: Error): Bluebird; - catchThrow(predicate: Object, reason: Error): Bluebird; + + catchThrow( + filter1: (new (...args: any[]) => E1) | ((error: any) => boolean) | Object, + filter2: (new (...args: any[]) => E2) | ((error: any) => boolean) | Object, + filter3: (new (...args: any[]) => E3) | ((error: any) => boolean) | Object, + filter4: (new (...args: any[]) => E4) | ((error: any) => boolean) | Object, + filter5: (new (...args: any[]) => E5) | ((error: any) => boolean) | Object, + reason: Error, + ): Bluebird; + catchThrow( + filter1: (new (...args: any[]) => E1) | ((error: any) => boolean) | Object, + filter2: (new (...args: any[]) => E2) | ((error: any) => boolean) | Object, + filter3: (new (...args: any[]) => E3) | ((error: any) => boolean) | Object, + filter4: (new (...args: any[]) => E4) | ((error: any) => boolean) | Object, + reason: Error, + ): Bluebird; + catchThrow( + filter1: (new (...args: any[]) => E1) | ((error: any) => boolean) | Object, + filter2: (new (...args: any[]) => E2) | ((error: any) => boolean) | Object, + filter3: (new (...args: any[]) => E3) | ((error: any) => boolean) | Object, + reason: Error, + ): Bluebird; + catchThrow( + filter1: (new (...args: any[]) => E1) | ((error: any) => boolean) | Object, + filter2: (new (...args: any[]) => E2) | ((error: any) => boolean) | Object, + reason: Error, + ): Bluebird; + catchThrow( + filter1: (new (...args: any[]) => E1) | ((error: any) => boolean) | Object, + reason: Error, + ): Bluebird; /** * Convert to String.