=== tests/cases/compiler/promiseType.ts === declare var p: Promise; >p : Promise >Promise : Promise const a = p.then(); >a : Promise >p.then() : Promise >p.then : { (onfulfilled: (value: boolean) => TResult1 | PromiseLike, onrejected: (reason: any) => TResult2 | PromiseLike): Promise; (onfulfilled: (value: boolean) => TResult | PromiseLike, onrejected: (reason: any) => TResult | PromiseLike): Promise; (onfulfilled: (value: boolean) => TResult | PromiseLike): Promise; (): Promise; } >p : Promise >then : { (onfulfilled: (value: boolean) => TResult1 | PromiseLike, onrejected: (reason: any) => TResult2 | PromiseLike): Promise; (onfulfilled: (value: boolean) => TResult | PromiseLike, onrejected: (reason: any) => TResult | PromiseLike): Promise; (onfulfilled: (value: boolean) => TResult | PromiseLike): Promise; (): Promise; } const b = p.then(b => 1); >b : Promise >p.then(b => 1) : Promise >p.then : { (onfulfilled: (value: boolean) => TResult1 | PromiseLike, onrejected: (reason: any) => TResult2 | PromiseLike): Promise; (onfulfilled: (value: boolean) => TResult | PromiseLike, onrejected: (reason: any) => TResult | PromiseLike): Promise; (onfulfilled: (value: boolean) => TResult | PromiseLike): Promise; (): Promise; } >p : Promise >then : { (onfulfilled: (value: boolean) => TResult1 | PromiseLike, onrejected: (reason: any) => TResult2 | PromiseLike): Promise; (onfulfilled: (value: boolean) => TResult | PromiseLike, onrejected: (reason: any) => TResult | PromiseLike): Promise; (onfulfilled: (value: boolean) => TResult | PromiseLike): Promise; (): Promise; } >b => 1 : (b: boolean) => number >b : boolean >1 : number const c = p.then(b => 1, e => 'error'); >c : Promise >p.then(b => 1, e => 'error') : Promise >p.then : { (onfulfilled: (value: boolean) => TResult1 | PromiseLike, onrejected: (reason: any) => TResult2 | PromiseLike): Promise; (onfulfilled: (value: boolean) => TResult | PromiseLike, onrejected: (reason: any) => TResult | PromiseLike): Promise; (onfulfilled: (value: boolean) => TResult | PromiseLike): Promise; (): Promise; } >p : Promise >then : { (onfulfilled: (value: boolean) => TResult1 | PromiseLike, onrejected: (reason: any) => TResult2 | PromiseLike): Promise; (onfulfilled: (value: boolean) => TResult | PromiseLike, onrejected: (reason: any) => TResult | PromiseLike): Promise; (onfulfilled: (value: boolean) => TResult | PromiseLike): Promise; (): Promise; } >b => 1 : (b: boolean) => number >b : boolean >1 : number >e => 'error' : (e: any) => string >e : any >'error' : string const d = p.then(b => 1, e => { }); >d : Promise >p.then(b => 1, e => { }) : Promise >p.then : { (onfulfilled: (value: boolean) => TResult1 | PromiseLike, onrejected: (reason: any) => TResult2 | PromiseLike): Promise; (onfulfilled: (value: boolean) => TResult | PromiseLike, onrejected: (reason: any) => TResult | PromiseLike): Promise; (onfulfilled: (value: boolean) => TResult | PromiseLike): Promise; (): Promise; } >p : Promise >then : { (onfulfilled: (value: boolean) => TResult1 | PromiseLike, onrejected: (reason: any) => TResult2 | PromiseLike): Promise; (onfulfilled: (value: boolean) => TResult | PromiseLike, onrejected: (reason: any) => TResult | PromiseLike): Promise; (onfulfilled: (value: boolean) => TResult | PromiseLike): Promise; (): Promise; } >b => 1 : (b: boolean) => number >b : boolean >1 : number >e => { } : (e: any) => void >e : any const e = p.then(b => 1, e => { throw Error(); }); >e : Promise >p.then(b => 1, e => { throw Error(); }) : Promise >p.then : { (onfulfilled: (value: boolean) => TResult1 | PromiseLike, onrejected: (reason: any) => TResult2 | PromiseLike): Promise; (onfulfilled: (value: boolean) => TResult | PromiseLike, onrejected: (reason: any) => TResult | PromiseLike): Promise; (onfulfilled: (value: boolean) => TResult | PromiseLike): Promise; (): Promise; } >p : Promise >then : { (onfulfilled: (value: boolean) => TResult1 | PromiseLike, onrejected: (reason: any) => TResult2 | PromiseLike): Promise; (onfulfilled: (value: boolean) => TResult | PromiseLike, onrejected: (reason: any) => TResult | PromiseLike): Promise; (onfulfilled: (value: boolean) => TResult | PromiseLike): Promise; (): Promise; } >b => 1 : (b: boolean) => number >b : boolean >1 : number >e => { throw Error(); } : (e: any) => never >e : any >Error() : Error >Error : ErrorConstructor const f = p.then(b => 1, e => Promise.reject(Error())); >f : Promise >p.then(b => 1, e => Promise.reject(Error())) : Promise >p.then : { (onfulfilled: (value: boolean) => TResult1 | PromiseLike, onrejected: (reason: any) => TResult2 | PromiseLike): Promise; (onfulfilled: (value: boolean) => TResult | PromiseLike, onrejected: (reason: any) => TResult | PromiseLike): Promise; (onfulfilled: (value: boolean) => TResult | PromiseLike): Promise; (): Promise; } >p : Promise >then : { (onfulfilled: (value: boolean) => TResult1 | PromiseLike, onrejected: (reason: any) => TResult2 | PromiseLike): Promise; (onfulfilled: (value: boolean) => TResult | PromiseLike, onrejected: (reason: any) => TResult | PromiseLike): Promise; (onfulfilled: (value: boolean) => TResult | PromiseLike): Promise; (): Promise; } >b => 1 : (b: boolean) => number >b : boolean >1 : number >e => Promise.reject(Error()) : (e: any) => Promise >e : any >Promise.reject(Error()) : Promise >Promise.reject : { (reason: any): Promise; (reason: any): Promise; } >Promise : PromiseConstructor >reject : { (reason: any): Promise; (reason: any): Promise; } >Error() : Error >Error : ErrorConstructor const g = p.catch(e => 'error'); >g : Promise >p.catch(e => 'error') : Promise >p.catch : { (onrejected: (reason: any) => TResult | PromiseLike): Promise; (onrejected: (reason: any) => boolean | PromiseLike): Promise; } >p : Promise >catch : { (onrejected: (reason: any) => TResult | PromiseLike): Promise; (onrejected: (reason: any) => boolean | PromiseLike): Promise; } >e => 'error' : (e: any) => string >e : any >'error' : string const h = p.catch(e => { }); >h : Promise >p.catch(e => { }) : Promise >p.catch : { (onrejected: (reason: any) => TResult | PromiseLike): Promise; (onrejected: (reason: any) => boolean | PromiseLike): Promise; } >p : Promise >catch : { (onrejected: (reason: any) => TResult | PromiseLike): Promise; (onrejected: (reason: any) => boolean | PromiseLike): Promise; } >e => { } : (e: any) => void >e : any const i = p.catch(e => { throw Error(); }); >i : Promise >p.catch(e => { throw Error(); }) : Promise >p.catch : { (onrejected: (reason: any) => TResult | PromiseLike): Promise; (onrejected: (reason: any) => boolean | PromiseLike): Promise; } >p : Promise >catch : { (onrejected: (reason: any) => TResult | PromiseLike): Promise; (onrejected: (reason: any) => boolean | PromiseLike): Promise; } >e => { throw Error(); } : (e: any) => never >e : any >Error() : Error >Error : ErrorConstructor const j = p.catch(e => Promise.reject(Error())); >j : Promise >p.catch(e => Promise.reject(Error())) : Promise >p.catch : { (onrejected: (reason: any) => TResult | PromiseLike): Promise; (onrejected: (reason: any) => boolean | PromiseLike): Promise; } >p : Promise >catch : { (onrejected: (reason: any) => TResult | PromiseLike): Promise; (onrejected: (reason: any) => boolean | PromiseLike): Promise; } >e => Promise.reject(Error()) : (e: any) => Promise >e : any >Promise.reject(Error()) : Promise >Promise.reject : { (reason: any): Promise; (reason: any): Promise; } >Promise : PromiseConstructor >reject : { (reason: any): Promise; (reason: any): Promise; } >Error() : Error >Error : ErrorConstructor async function A() { >A : () => Promise const a = await p; >a : boolean >await p : boolean >p : Promise return a; >a : boolean } async function B() { >B : () => Promise const a = await p; >a : boolean >await p : boolean >p : Promise return 1; >1 : number } // NOTE: This reports a "No best comment type exists among return expressions." error, and is // ignored to get the types result for the test. // async function C() { // try { // const a = await p; // return 1; // } // catch (e) { // return 'error'; // } // } async function D() { >D : () => Promise try { const a = await p; >a : boolean >await p : boolean >p : Promise return 1; >1 : number } catch (e) { >e : any } } async function E() { >E : () => Promise try { const a = await p; >a : boolean >await p : boolean >p : Promise return 1; >1 : number } catch (e) { >e : any throw Error(); >Error() : Error >Error : ErrorConstructor } } async function F() { >F : () => Promise try { const a = await p; >a : boolean >await p : boolean >p : Promise return 1; >1 : number } catch (e) { >e : any return Promise.reject(Error()); >Promise.reject(Error()) : Promise >Promise.reject : { (reason: any): Promise; (reason: any): Promise; } >Promise : PromiseConstructor >reject : { (reason: any): Promise; (reason: any): Promise; } >Error() : Error >Error : ErrorConstructor } } async function G() { >G : () => Promise try { const a = await p; >a : boolean >await p : boolean >p : Promise return a; >a : boolean } catch (e) { >e : any return; } } async function H() { >H : () => Promise try { const a = await p; >a : boolean >await p : boolean >p : Promise return a; >a : boolean } catch (e) { >e : any throw Error(); >Error() : Error >Error : ErrorConstructor } } async function I() { >I : () => Promise try { const a = await p; >a : boolean >await p : boolean >p : Promise return a; >a : boolean } catch (e) { >e : any return Promise.reject(Error()); >Promise.reject(Error()) : Promise >Promise.reject : { (reason: any): Promise; (reason: any): Promise; } >Promise : PromiseConstructor >reject : { (reason: any): Promise; (reason: any): Promise; } >Error() : Error >Error : ErrorConstructor } }