=== tests/cases/compiler/ipromise3.ts === interface IPromise3 { >IPromise3 : IPromise3 >T : T then(success?: (value: T) => IPromise3, error?: (error: any) => IPromise3, progress?: (progress: any) => void ): IPromise3; >then : { (success?: (value: T) => IPromise3, error?: (error: any) => IPromise3, progress?: (progress: any) => void): IPromise3; (success?: (value: T) => IPromise3, error?: (error: any) => U, progress?: (progress: any) => void): IPromise3; (success?: (value: T) => U, error?: (error: any) => IPromise3, progress?: (progress: any) => void): IPromise3; (success?: (value: T) => U, error?: (error: any) => U, progress?: (progress: any) => void): IPromise3; } >U : U >success : (value: T) => IPromise3 >value : T >T : T >IPromise3 : IPromise3 >U : U >error : (error: any) => IPromise3 >error : any >IPromise3 : IPromise3 >U : U >progress : (progress: any) => void >progress : any >IPromise3 : IPromise3 >U : U then(success?: (value: T) => IPromise3, error?: (error: any) => U, progress?: (progress: any) => void ): IPromise3; >then : { (success?: (value: T) => IPromise3, error?: (error: any) => IPromise3, progress?: (progress: any) => void): IPromise3; (success?: (value: T) => IPromise3, error?: (error: any) => U, progress?: (progress: any) => void): IPromise3; (success?: (value: T) => U, error?: (error: any) => IPromise3, progress?: (progress: any) => void): IPromise3; (success?: (value: T) => U, error?: (error: any) => U, progress?: (progress: any) => void): IPromise3; } >U : U >success : (value: T) => IPromise3 >value : T >T : T >IPromise3 : IPromise3 >U : U >error : (error: any) => U >error : any >U : U >progress : (progress: any) => void >progress : any >IPromise3 : IPromise3 >U : U then(success?: (value: T) => U, error?: (error: any) => IPromise3, progress?: (progress: any) => void ): IPromise3; >then : { (success?: (value: T) => IPromise3, error?: (error: any) => IPromise3, progress?: (progress: any) => void): IPromise3; (success?: (value: T) => IPromise3, error?: (error: any) => U, progress?: (progress: any) => void): IPromise3; (success?: (value: T) => U, error?: (error: any) => IPromise3, progress?: (progress: any) => void): IPromise3; (success?: (value: T) => U, error?: (error: any) => U, progress?: (progress: any) => void): IPromise3; } >U : U >success : (value: T) => U >value : T >T : T >U : U >error : (error: any) => IPromise3 >error : any >IPromise3 : IPromise3 >U : U >progress : (progress: any) => void >progress : any >IPromise3 : IPromise3 >U : U then(success?: (value: T) => U, error?: (error: any) => U, progress?: (progress: any) => void ): IPromise3; >then : { (success?: (value: T) => IPromise3, error?: (error: any) => IPromise3, progress?: (progress: any) => void): IPromise3; (success?: (value: T) => IPromise3, error?: (error: any) => U, progress?: (progress: any) => void): IPromise3; (success?: (value: T) => U, error?: (error: any) => IPromise3, progress?: (progress: any) => void): IPromise3; (success?: (value: T) => U, error?: (error: any) => U, progress?: (progress: any) => void): IPromise3; } >U : U >success : (value: T) => U >value : T >T : T >U : U >error : (error: any) => U >error : any >U : U >progress : (progress: any) => void >progress : any >IPromise3 : IPromise3 >U : U done? (success?: (value: T) => any, error?: (error: any) => any, progress?: (progress: any) => void ): void; >done : (success?: (value: T) => any, error?: (error: any) => any, progress?: (progress: any) => void) => void >U : U >success : (value: T) => any >value : T >T : T >error : (error: any) => any >error : any >progress : (progress: any) => void >progress : any } var p1: IPromise3; >p1 : IPromise3 >IPromise3 : IPromise3 var p2: IPromise3 = p1.then(function (x) { >p2 : IPromise3 >IPromise3 : IPromise3 >p1.then(function (x) { return x;}) : IPromise3 >p1.then : { (success?: (value: string) => IPromise3, error?: (error: any) => IPromise3, progress?: (progress: any) => void): IPromise3; (success?: (value: string) => IPromise3, error?: (error: any) => U, progress?: (progress: any) => void): IPromise3; (success?: (value: string) => U, error?: (error: any) => IPromise3, progress?: (progress: any) => void): IPromise3; (success?: (value: string) => U, error?: (error: any) => U, progress?: (progress: any) => void): IPromise3; } >p1 : IPromise3 >then : { (success?: (value: string) => IPromise3, error?: (error: any) => IPromise3, progress?: (progress: any) => void): IPromise3; (success?: (value: string) => IPromise3, error?: (error: any) => U, progress?: (progress: any) => void): IPromise3; (success?: (value: string) => U, error?: (error: any) => IPromise3, progress?: (progress: any) => void): IPromise3; (success?: (value: string) => U, error?: (error: any) => U, progress?: (progress: any) => void): IPromise3; } >function (x) { return x;} : (x: string) => string >x : string return x; >x : string });