From bd36ddb202fa45adf7c9966de1d202bd716a9367 Mon Sep 17 00:00:00 2001 From: Wellington Mendoza Date: Mon, 19 Jun 2017 15:51:45 -0500 Subject: [PATCH] Fix predicate and object types for bluebird --- types/bluebird/bluebird-tests.ts | 24 ++++ types/bluebird/index.d.ts | 240 +++++++++++++++++++++++-------- 2 files changed, 204 insertions(+), 60 deletions(-) diff --git a/types/bluebird/bluebird-tests.ts b/types/bluebird/bluebird-tests.ts index c8fab7d57e..b1b766a04f 100644 --- a/types/bluebird/bluebird-tests.ts +++ b/types/bluebird/bluebird-tests.ts @@ -373,6 +373,30 @@ fooProm = fooProm.catch(CustomError, reason => { fooProm = fooProm.catch(CustomError1, CustomError2, CustomError3, error => {}); fooProm = fooProm.catch(CustomError1, CustomError2, CustomError3, CustomError4, error => {}); fooProm = fooProm.catch(CustomError1, CustomError2, CustomError3, CustomError4, CustomError5, error => {}); + + const booPredicate1 = (error: CustomError1) => true; + const booPredicate2 = (error: [number]) => true; + const booPredicate3 = (error: string) => true; + const booPredicate4 = (error: Object) => true; + const booPredicate5 = (error: any) => true; + + fooProm = fooProm.catch(booPredicate1, error => {}); + fooProm = fooProm.catch(booPredicate1, booPredicate2, error => {}); + fooProm = fooProm.catch(booPredicate1, booPredicate2, booPredicate3, error => {}); + fooProm = fooProm.catch(booPredicate1, booPredicate2, booPredicate3, booPredicate4, error => {}); + fooProm = fooProm.catch(booPredicate1, booPredicate2, booPredicate3, booPredicate4, booPredicate5, error => {}); + + const booObject1 = new CustomError1(); + const booObject2 = [400, 500]; + const booObject3 = "Error"; + const booObject4 = {code: 400}; + const booObject5: any = null; + + fooProm = fooProm.catch(booObject1, error => {}); + fooProm = fooProm.catch(booObject1, booObject2, error => {}); + fooProm = fooProm.catch(booObject1, booObject2, booObject3, error => {}); + fooProm = fooProm.catch(booObject1, booObject2, booObject3, booObject4, error => {}); + fooProm = fooProm.catch(booObject1, booObject2, booObject3, booObject4, booObject5, error => {}); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/types/bluebird/index.d.ts b/types/bluebird/index.d.ts index 451b23fa02..75c9d6701f 100644 --- a/types/bluebird/index.d.ts +++ b/types/bluebird/index.d.ts @@ -69,127 +69,247 @@ declare class Bluebird implements PromiseLike, Bluebird.Inspection { * TODO: disallow non-objects */ 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, + filter1: (new (...args: any[]) => E1) | ((error: E1) => boolean) | E1, + filter2: (new (...args: any[]) => E2) | ((error: E2) => boolean) | E2, + filter3: (new (...args: any[]) => E3) | ((error: E3) => boolean) | E3, + filter4: (new (...args: any[]) => E4) | ((error: E4) => boolean) | E4, + filter5: (new (...args: any[]) => E5) | ((error: E5) => boolean) | E5, + onReject: (error: E1 | E2 | E3 | E4 | E5) => R | PromiseLike | void | PromiseLike, + ): Bluebird; + catch( + filter1: ((error: E1) => boolean) | E1, + filter2: ((error: E2) => boolean) | E2, + filter3: ((error: E3) => boolean) | E3, + filter4: ((error: E4) => boolean) | E4, + filter5: ((error: E5) => boolean) | E5, onReject: (error: E1 | E2 | E3 | E4 | E5) => R | PromiseLike | void | PromiseLike, ): 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, + filter1: (new (...args: any[]) => E1) | ((error: E1) => boolean) | E1, + filter2: (new (...args: any[]) => E2) | ((error: E2) => boolean) | E2, + filter3: (new (...args: any[]) => E3) | ((error: E3) => boolean) | E3, + filter4: (new (...args: any[]) => E4) | ((error: E4) => boolean) | E4, + filter5: (new (...args: any[]) => E5) | ((error: E5) => boolean) | E5, + onReject: (error: E1 | E2 | E3 | E4 | E5) => R | PromiseLike | void | PromiseLike, + ): Bluebird; + caught( + filter1: ((error: E1) => boolean) | E1, + filter2: ((error: E2) => boolean) | E2, + filter3: ((error: E3) => boolean) | E3, + filter4: ((error: E4) => boolean) | E4, + filter5: ((error: E5) => boolean) | E5, onReject: (error: E1 | E2 | E3 | E4 | E5) => R | PromiseLike | void | PromiseLike, ): 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, + filter1: (new (...args: any[]) => E1) | ((error: E1) => boolean) | E1, + filter2: (new (...args: any[]) => E2) | ((error: E2) => boolean) | E2, + filter3: (new (...args: any[]) => E3) | ((error: E3) => boolean) | E3, + filter4: (new (...args: any[]) => E4) | ((error: E4) => boolean) | E4, + filter5: (new (...args: any[]) => E5) | ((error: E5) => boolean) | E5, + onReject: (error: E1 | E2 | E3 | E4 | E5) => U | PromiseLike | void | PromiseLike, + ): Bluebird; + catch( + filter1: ((error: E1) => boolean) | E1, + filter2: ((error: E2) => boolean) | E2, + filter3: ((error: E3) => boolean) | E3, + filter4: ((error: E4) => boolean) | E4, + filter5: ((error: E5) => boolean) | E5, onReject: (error: E1 | E2 | E3 | E4 | E5) => U | PromiseLike, ): 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, + filter1: (new (...args: any[]) => E1) | ((error: E1) => boolean) | E1, + filter2: (new (...args: any[]) => E2) | ((error: E2) => boolean) | E2, + filter3: (new (...args: any[]) => E3) | ((error: E3) => boolean) | E3, + filter4: (new (...args: any[]) => E4) | ((error: E4) => boolean) | E4, + filter5: (new (...args: any[]) => E5) | ((error: E5) => boolean) | E5, + onReject: (error: E1 | E2 | E3 | E4 | E5) => U | PromiseLike, + ): Bluebird; + caught( + filter1: ((error: E1) => boolean) | E1, + filter2: ((error: E2) => boolean) | E2, + filter3: ((error: E3) => boolean) | E3, + filter4: ((error: E4) => boolean) | E4, + filter5: ((error: E5) => boolean) | E5, onReject: (error: E1 | E2 | E3 | E4 | E5) => U | PromiseLike, ): 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, + filter1: (new (...args: any[]) => E1) | ((error: E1) => boolean) | E1, + filter2: (new (...args: any[]) => E2) | ((error: E2) => boolean) | E2, + filter3: (new (...args: any[]) => E3) | ((error: E3) => boolean) | E3, + filter4: (new (...args: any[]) => E4) | ((error: E4) => boolean) | E4, + onReject: (error: E1 | E2 | E3 | E4) => R | PromiseLike | void | PromiseLike, + ): Bluebird; + catch( + filter1: ((error: E1) => boolean) | E1, + filter2: ((error: E2) => boolean) | E2, + filter3: ((error: E3) => boolean) | E3, + filter4: ((error: E4) => boolean) | E4, onReject: (error: E1 | E2 | E3 | E4) => R | PromiseLike | void | PromiseLike, ): 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, + filter1: (new (...args: any[]) => E1) | ((error: E1) => boolean) | E1, + filter2: (new (...args: any[]) => E2) | ((error: E2) => boolean) | E2, + filter3: (new (...args: any[]) => E3) | ((error: E3) => boolean) | E3, + filter4: (new (...args: any[]) => E4) | ((error: E4) => boolean) | E4, + onReject: (error: E1 | E2 | E3 | E4) => R | PromiseLike | void | PromiseLike, + ): Bluebird; + caught( + filter1: ((error: E1) => boolean) | E1, + filter2: ((error: E2) => boolean) | E2, + filter3: ((error: E3) => boolean) | E3, + filter4: ((error: E4) => boolean) | E4, onReject: (error: E1 | E2 | E3 | E4) => R | PromiseLike | void | PromiseLike, ): 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, + filter1: (new (...args: any[]) => E1) | ((error: E1) => boolean) | E1, + filter2: (new (...args: any[]) => E2) | ((error: E2) => boolean) | E2, + filter3: (new (...args: any[]) => E3) | ((error: E3) => boolean) | E3, + filter4: (new (...args: any[]) => E4) | ((error: E4) => boolean) | E4, + onReject: (error: E1 | E2 | E3 | E4) => U | PromiseLike, + ): Bluebird; + catch( + filter1: ((error: E1) => boolean) | E1, + filter2: ((error: E2) => boolean) | E2, + filter3: ((error: E3) => boolean) | E3, + filter4: ((error: E4) => boolean) | E4, onReject: (error: E1 | E2 | E3 | E4) => U | PromiseLike, ): 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, + filter1: (new (...args: any[]) => E1) | ((error: E1) => boolean) | E1, + filter2: (new (...args: any[]) => E2) | ((error: E2) => boolean) | E2, + filter3: (new (...args: any[]) => E3) | ((error: E3) => boolean) | E3, + filter4: (new (...args: any[]) => E4) | ((error: E4) => boolean) | E4, + onReject: (error: E1 | E2 | E3 | E4) => U | PromiseLike, + ): Bluebird; + caught( + filter1: ((error: E1) => boolean) | E1, + filter2: ((error: E2) => boolean) | E2, + filter3: ((error: E3) => boolean) | E3, + filter4: ((error: E4) => boolean) | E4, onReject: (error: E1 | E2 | E3 | E4) => U | PromiseLike, ): 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, + filter1: (new (...args: any[]) => E1) | ((error: E1) => boolean) | E1, + filter2: (new (...args: any[]) => E2) | ((error: E2) => boolean) | E2, + filter3: (new (...args: any[]) => E3) | ((error: E3) => boolean) | E3, + onReject: (error: E1 | E2 | E3) => R | PromiseLike | void | PromiseLike, + ): Bluebird; + catch( + filter1: ((error: E1) => boolean) | E1, + filter2: ((error: E2) => boolean) | E2, + filter3: ((error: E3) => boolean) | E3, onReject: (error: E1 | E2 | E3) => R | PromiseLike | void | PromiseLike, ): 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, + filter1: (new (...args: any[]) => E1) | ((error: E1) => boolean) | E1, + filter2: (new (...args: any[]) => E2) | ((error: E2) => boolean) | E2, + filter3: (new (...args: any[]) => E3) | ((error: E3) => boolean) | E3, + onReject: (error: E1 | E2 | E3) => R | PromiseLike | void | PromiseLike, + ): Bluebird; + caught( + filter1: ((error: E1) => boolean) | E1, + filter2: ((error: E2) => boolean) | E2, + filter3: ((error: E3) => boolean) | E3, onReject: (error: E1 | E2 | E3) => R | PromiseLike | void | PromiseLike, ): 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, + filter1: (new (...args: any[]) => E1) | ((error: E1) => boolean) | E1, + filter2: (new (...args: any[]) => E2) | ((error: E2) => boolean) | E2, + filter3: (new (...args: any[]) => E3) | ((error: E3) => boolean) | E3, + onReject: (error: E1 | E2 | E3) => U | PromiseLike, + ): Bluebird; + catch( + filter1: ((error: E1) => boolean) | E1, + filter2: ((error: E2) => boolean) | E2, + filter3: ((error: E3) => boolean) | E3, onReject: (error: E1 | E2 | E3) => U | PromiseLike, ): 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, + filter1: (new (...args: any[]) => E1) | ((error: E1) => boolean) | E1, + filter2: (new (...args: any[]) => E2) | ((error: E2) => boolean) | E2, + filter3: (new (...args: any[]) => E3) | ((error: E3) => boolean) | E3, + onReject: (error: E1 | E2 | E3) => U | PromiseLike, + ): Bluebird; + caught( + filter1: ((error: E1) => boolean) | E1, + filter2: ((error: E2) => boolean) | E2, + filter3: ((error: E3) => boolean) | E3, onReject: (error: E1 | E2 | E3) => U | PromiseLike, ): Bluebird; catch( - filter1: (new (...args: any[]) => E1) | ((error: any) => boolean) | Object, - filter2: (new (...args: any[]) => E2) | ((error: any) => boolean) | Object, + filter1: (new (...args: any[]) => E1) | ((error: E1) => boolean) | E1, + filter2: (new (...args: any[]) => E2) | ((error: E2) => boolean) | E2, + onReject: (error: E1 | E2) => R | PromiseLike | void | PromiseLike, + ): Bluebird; + catch( + filter1: ((error: E1) => boolean) | E1, + filter2: ((error: E2) => boolean) | E2, onReject: (error: E1 | E2) => R | PromiseLike | void | PromiseLike, ): Bluebird; caught( - filter1: (new (...args: any[]) => E1) | ((error: any) => boolean) | Object, - filter2: (new (...args: any[]) => E2) | ((error: any) => boolean) | Object, + filter1: (new (...args: any[]) => E1) | ((error: E1) => boolean) | E1, + filter2: (new (...args: any[]) => E2) | ((error: E2) => boolean) | E2, + onReject: (error: E1 | E2) => R | PromiseLike | void | PromiseLike, + ): Bluebird; + caught( + filter1: ((error: E1) => boolean) | E1, + filter2: ((error: E2) => boolean) | E2, onReject: (error: E1 | E2) => R | PromiseLike | void | PromiseLike, ): Bluebird; catch( - filter1: (new (...args: any[]) => E1) | ((error: any) => boolean) | Object, - filter2: (new (...args: any[]) => E2) | ((error: any) => boolean) | Object, + filter1: (new (...args: any[]) => E1) | ((error: E1) => boolean) | E1, + filter2: (new (...args: any[]) => E2) | ((error: E2) => boolean) | E2, + onReject: (error: E1 | E2) => U | PromiseLike, + ): Bluebird; + catch( + filter1: ((error: E1) => boolean) | E1, + filter2: ((error: E2) => boolean) | E2, onReject: (error: E1 | E2) => U | PromiseLike, ): Bluebird; caught( - filter1: (new (...args: any[]) => E1) | ((error: any) => boolean) | Object, - filter2: (new (...args: any[]) => E2) | ((error: any) => boolean) | Object, + filter1: (new (...args: any[]) => E1) | ((error: E1) => boolean) | E1, + filter2: (new (...args: any[]) => E2) | ((error: E2) => boolean) | E2, + onReject: (error: E1 | E2) => U | PromiseLike, + ): Bluebird; + caught( + filter1: ((error: E1) => boolean) | E1, + filter2: ((error: E2) => boolean) | E2, onReject: (error: E1 | E2) => U | PromiseLike, ): Bluebird; catch( - filter1: (new (...args: any[]) => E1) | ((error: any) => boolean) | Object, + filter1: (new (...args: any[]) => E1) | ((error: E1) => boolean) | E1, + onReject: (error: E1) => R | PromiseLike | void | PromiseLike, + ): Bluebird; + catch( + filter1: ((error: E1) => boolean) | E1, onReject: (error: E1) => R | PromiseLike | void | PromiseLike, ): Bluebird; caught( - filter1: (new (...args: any[]) => E1) | ((error: any) => boolean) | Object, + filter1: (new (...args: any[]) => E1) | ((error: E1) => boolean) | E1, + onReject: (error: E1) => R | PromiseLike | void | PromiseLike, + ): Bluebird; + caught( + filter1: ((error: E1) => boolean) | E1, onReject: (error: E1) => R | PromiseLike | void | PromiseLike, ): Bluebird; catch( - filter1: (new (...args: any[]) => E1) | ((error: any) => boolean) | Object, + filter1: (new (...args: any[]) => E1) | ((error: E1) => boolean) | E1, + onReject: (error: E1) => U | PromiseLike, + ): Bluebird; + catch( + filter1: ((error: E1) => boolean) | E1, onReject: (error: E1) => U | PromiseLike, ): Bluebird; caught( - filter1: (new (...args: any[]) => E1) | ((error: any) => boolean) | Object, + filter1: (new (...args: any[]) => E1) | ((error: E1) => boolean) | E1, + onReject: (error: E1) => U | PromiseLike, + ): Bluebird; + caught( + filter1: ((error: E1) => boolean) | E1, onReject: (error: E1) => U | PromiseLike, ): Bluebird;