tests/cases/compiler/promisesWithConstraints.ts(15,1): error TS2322: Type 'Promise<Foo>' is not assignable to type 'Promise<Bar>'.
  Types of property 'then' are incompatible.
    Type '{ <TResult1 = Foo, TResult2 = never>(onfulfilled?: (value: Foo) => TResult1 | PromiseLike<TResult1>, onrejected?: (reason: any) => TResult2 | PromiseLike<TResult2>): Promise<awaited TResult1 | awaited TResult2>; <U>(cb: (x: Foo) => Promise<U>): Promise<U>; }' is not assignable to type '{ <TResult1 = Bar, TResult2 = never>(onfulfilled?: (value: Bar) => TResult1 | PromiseLike<TResult1>, onrejected?: (reason: any) => TResult2 | PromiseLike<TResult2>): Promise<awaited TResult1 | awaited TResult2>; <U>(cb: (x: Bar) => Promise<U>): Promise<U>; }'.
      Types of parameters 'onfulfilled' and 'onfulfilled' are incompatible.
        Types of parameters 'value' and 'value' are incompatible.
          Type 'Foo' is not assignable to type 'Bar'.
tests/cases/compiler/promisesWithConstraints.ts(20,1): error TS2322: Type 'CPromise<Foo>' is not assignable to type 'CPromise<Bar>'.
  Type 'Foo' is not assignable to type 'Bar'.


==== tests/cases/compiler/promisesWithConstraints.ts (2 errors) ====
    interface Promise<T> {
        then<U>(cb: (x: T) => Promise<U>): Promise<U>;
    }
    
    interface CPromise<T extends { x: any; }> {
        then<U extends { x: any; }>(cb: (x: T) => Promise<U>): Promise<U>;
    }
    
    interface Foo { x; }
    interface Bar { x; y; }
    
    var a: Promise<Foo>;
    var b: Promise<Bar>;
    a = b; // ok
    b = a; // ok
    ~
!!! error TS2322: Type 'Promise<Foo>' is not assignable to type 'Promise<Bar>'.
!!! error TS2322:   Types of property 'then' are incompatible.
!!! error TS2322:     Type '{ <TResult1 = Foo, TResult2 = never>(onfulfilled?: (value: Foo) => TResult1 | PromiseLike<TResult1>, onrejected?: (reason: any) => TResult2 | PromiseLike<TResult2>): Promise<awaited TResult1 | awaited TResult2>; <U>(cb: (x: Foo) => Promise<U>): Promise<U>; }' is not assignable to type '{ <TResult1 = Bar, TResult2 = never>(onfulfilled?: (value: Bar) => TResult1 | PromiseLike<TResult1>, onrejected?: (reason: any) => TResult2 | PromiseLike<TResult2>): Promise<awaited TResult1 | awaited TResult2>; <U>(cb: (x: Bar) => Promise<U>): Promise<U>; }'.
!!! error TS2322:       Types of parameters 'onfulfilled' and 'onfulfilled' are incompatible.
!!! error TS2322:         Types of parameters 'value' and 'value' are incompatible.
!!! error TS2322:           Type 'Foo' is not assignable to type 'Bar'.
    
    var a2: CPromise<Foo>;
    var b2: CPromise<Bar>;
    a2 = b2; // ok
    b2 = a2; // was error
    ~~
!!! error TS2322: Type 'CPromise<Foo>' is not assignable to type 'CPromise<Bar>'.
!!! error TS2322:   Type 'Foo' is not assignable to type 'Bar'.
    