=== tests/cases/compiler/promiseTest.ts === interface Promise { >Promise : Promise, Symbol(Promise, Decl(promiseTest.ts, 0, 0)) >T : T, Symbol(T, Decl(promiseTest.ts, 1, 18)) then(success?: (value: T) => Promise): Promise; >then : { (success?: (value: T) => Promise): Promise; (success?: (value: T) => B): Promise; }, Symbol(then, Decl(promiseTest.ts, 1, 22), Decl(promiseTest.ts, 2, 60)) >A : A, Symbol(A, Decl(promiseTest.ts, 2, 9)) >success : (value: T) => Promise, Symbol(success, Decl(promiseTest.ts, 2, 12)) >value : T, Symbol(value, Decl(promiseTest.ts, 2, 23)) >T : T, Symbol(T, Decl(promiseTest.ts, 1, 18)) >Promise : Promise, Symbol(Promise, Decl(promiseTest.ts, 0, 0)) >A : A, Symbol(A, Decl(promiseTest.ts, 2, 9)) >Promise : Promise, Symbol(Promise, Decl(promiseTest.ts, 0, 0)) >A : A, Symbol(A, Decl(promiseTest.ts, 2, 9)) then(success?: (value: T) => B): Promise; >then : { (success?: (value: T) => Promise): Promise; (success?: (value: T) => B): Promise; }, Symbol(then, Decl(promiseTest.ts, 1, 22), Decl(promiseTest.ts, 2, 60)) >B : B, Symbol(B, Decl(promiseTest.ts, 3, 9)) >success : (value: T) => B, Symbol(success, Decl(promiseTest.ts, 3, 12)) >value : T, Symbol(value, Decl(promiseTest.ts, 3, 23)) >T : T, Symbol(T, Decl(promiseTest.ts, 1, 18)) >B : B, Symbol(B, Decl(promiseTest.ts, 3, 9)) >Promise : Promise, Symbol(Promise, Decl(promiseTest.ts, 0, 0)) >B : B, Symbol(B, Decl(promiseTest.ts, 3, 9)) data: T; >data : T, Symbol(data, Decl(promiseTest.ts, 3, 51)) >T : T, Symbol(T, Decl(promiseTest.ts, 1, 18)) } var p: Promise = null; >p : Promise, Symbol(p, Decl(promiseTest.ts, 7, 3)) >Promise : Promise, Symbol(Promise, Decl(promiseTest.ts, 0, 0)) >null : null var p2 = p.then(function (x) { >p2 : Promise, Symbol(p2, Decl(promiseTest.ts, 8, 3)) >p.then(function (x) { return p;} ) : Promise >p.then : { (success?: (value: number) => Promise): Promise; (success?: (value: number) => B): Promise; }, Symbol(Promise.then, Decl(promiseTest.ts, 1, 22), Decl(promiseTest.ts, 2, 60)) >p : Promise, Symbol(p, Decl(promiseTest.ts, 7, 3)) >then : { (success?: (value: number) => Promise): Promise; (success?: (value: number) => B): Promise; }, Symbol(Promise.then, Decl(promiseTest.ts, 1, 22), Decl(promiseTest.ts, 2, 60)) >function (x) { return p;} : (x: number) => Promise >x : number, Symbol(x, Decl(promiseTest.ts, 8, 26)) return p; >p : Promise, Symbol(p, Decl(promiseTest.ts, 7, 3)) } ); var x = p2.data; // number >x : number, Symbol(x, Decl(promiseTest.ts, 12, 3)) >p2.data : number, Symbol(Promise.data, Decl(promiseTest.ts, 3, 51)) >p2 : Promise, Symbol(p2, Decl(promiseTest.ts, 8, 3)) >data : number, Symbol(Promise.data, Decl(promiseTest.ts, 3, 51))