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