=== tests/cases/compiler/bestCommonTypeReturnStatement.ts === interface IPromise { >IPromise : IPromise >T : T then(successCallback: (promiseValue: T) => any, errorCallback?: (reason: any) => any): IPromise; >then : (successCallback: (promiseValue: T) => any, errorCallback?: (reason: any) => any) => IPromise >successCallback : (promiseValue: T) => any >promiseValue : T >T : T >errorCallback : (reason: any) => any >reason : any >IPromise : IPromise } function f() { >f : () => IPromise if (true) return b(); >true : boolean >b() : IPromise >b : () => IPromise return d(); >d() : IPromise >d : () => IPromise } function b(): IPromise { return null; } >b : () => IPromise >IPromise : IPromise >null : null function d(): IPromise { return null; } >d : () => IPromise >IPromise : IPromise >null : null