=== tests/cases/compiler/promiseTest.ts === interface Promise { >Promise : Promise >T : T then(success?: (value: T) => Promise): Promise; >then : { (success?: (value: T) => Promise): Promise; (success?: (value: T) => B): Promise; } >A : A >success : (value: T) => Promise >value : T >T : T >Promise : Promise >A : A >Promise : Promise >A : A then(success?: (value: T) => B): Promise; >then : { (success?: (value: T) => Promise): Promise; (success?: (value: T) => B): Promise; } >B : B >success : (value: T) => B >value : T >T : T >B : B >Promise : Promise >B : B data: T; >data : T >T : T } var p: Promise = null; >p : Promise >Promise : Promise var p2 = p.then(function (x) { >p2 : Promise >p.then(function (x) { return p;} ) : Promise >p.then : { (success?: (value: number) => Promise): Promise; (success?: (value: number) => B): Promise; } >p : Promise >then : { (success?: (value: number) => Promise): Promise; (success?: (value: number) => B): Promise; } >function (x) { return p;} : (x: number) => Promise >x : number return p; >p : Promise } ); var x = p2.data; // number >x : number >p2.data : number >p2 : Promise >data : number