=== tests/cases/compiler/promiseIdentityWithConstraints.ts === interface IPromise { >IPromise : IPromise >T : T >V : V then(callback: (x: T) => IPromise): IPromise; >then : (callback: (x: T) => IPromise) => IPromise >U : U >T : T >W : W >V : V >callback : (x: T) => IPromise >x : T >T : T >IPromise : IPromise >U : U >W : W >IPromise : IPromise >U : U >W : W } interface Promise { >Promise : Promise >T : T >V : V then(callback: (x: T) => Promise): Promise; >then : (callback: (x: T) => Promise) => Promise >U : U >T : T >W : W >V : V >callback : (x: T) => Promise >x : T >T : T >Promise : Promise >U : U >W : W >Promise : Promise >U : U >W : W } // Error because constraint V doesn't match var x: IPromise; >x : IPromise >IPromise : IPromise var x: Promise; >x : IPromise >Promise : Promise