tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypesOfTypeParameterWithConstraints4.ts(47,5): error TS2411: Property 'foo' of type 'V' is not assignable to 'string' index type 'Foo'.
tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypesOfTypeParameterWithConstraints4.ts(47,5): error TS2416: Property 'foo' in type 'D3<T, U, V>' is not assignable to the same property in base type 'B1<Foo>'.
  Type 'V' is not assignable to type 'Foo'.
tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypesOfTypeParameterWithConstraints4.ts(57,5): error TS2411: Property 'foo' of type 'U' is not assignable to 'string' index type 'T'.
tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypesOfTypeParameterWithConstraints4.ts(57,5): error TS2416: Property 'foo' in type 'D5<T, U, V>' is not assignable to the same property in base type 'B1<T>'.
  Type 'U' is not assignable to type 'T'.
    'U' is assignable to the constraint of type 'T', but 'T' could be instantiated with a different subtype of constraint 'Foo'.
tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypesOfTypeParameterWithConstraints4.ts(62,5): error TS2411: Property 'foo' of type 'V' is not assignable to 'string' index type 'T'.
tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypesOfTypeParameterWithConstraints4.ts(62,5): error TS2416: Property 'foo' in type 'D6<T, U, V>' is not assignable to the same property in base type 'B1<T>'.
  Type 'V' is not assignable to type 'T'.
    'T' could be instantiated with an arbitrary type which could be unrelated to 'V'.
tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypesOfTypeParameterWithConstraints4.ts(67,5): error TS2411: Property 'foo' of type 'T' is not assignable to 'string' index type 'U'.
tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypesOfTypeParameterWithConstraints4.ts(67,5): error TS2416: Property 'foo' in type 'D7<T, U, V>' is not assignable to the same property in base type 'B1<U>'.
  Type 'T' is not assignable to type 'U'.
    'T' is assignable to the constraint of type 'U', but 'U' could be instantiated with a different subtype of constraint 'Foo'.
tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypesOfTypeParameterWithConstraints4.ts(77,5): error TS2411: Property 'foo' of type 'V' is not assignable to 'string' index type 'U'.
tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypesOfTypeParameterWithConstraints4.ts(77,5): error TS2416: Property 'foo' in type 'D9<T, U, V>' is not assignable to the same property in base type 'B1<U>'.
  Type 'V' is not assignable to type 'U'.
    'U' could be instantiated with an arbitrary type which could be unrelated to 'V'.


==== tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypesOfTypeParameterWithConstraints4.ts (10 errors) ====
    // checking whether other types are subtypes of type parameters with constraints
    
    class Foo { foo: number; }
    function f<T extends Foo, U extends Foo, V>(t: T, u: U, v: V) {
        // ok
        var r = true ? t : u;
        var r = true ? u : t;
    
        // ok
        var r2 = true ? t : v;
        var r2 = true ? v : t;
    
        // ok
        var r3 = true ? v : u;
        var r3 = true ? u : v;
    
        // ok
        var r4 = true ? t : new Foo();
        var r4 = true ? new Foo() : t;
    
        // ok
        var r5 = true ? u : new Foo();
        var r5 = true ? new Foo() : u;
    
        // ok
        var r6 = true ? v : new Foo();
        var r6 = true ? new Foo() : v;
    
    }
    
    class B1<T> {
        foo: T;
    }
    
    class D1<T extends Foo, U extends Foo, V> extends B1<Foo> {
        [x: string]: Foo;
        foo: T; // ok
    }
    
    class D2<T extends Foo, U extends Foo, V> extends B1<Foo> {
        [x: string]: Foo;
        foo: U; // ok
    }
    
    class D3<T extends Foo, U extends Foo, V> extends B1<Foo> {
        [x: string]: Foo;
        foo: V; // error
        ~~~
!!! error TS2411: Property 'foo' of type 'V' is not assignable to 'string' index type 'Foo'.
        ~~~
!!! error TS2416: Property 'foo' in type 'D3<T, U, V>' is not assignable to the same property in base type 'B1<Foo>'.
!!! error TS2416:   Type 'V' is not assignable to type 'Foo'.
!!! related TS2208 tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypesOfTypeParameterWithConstraints4.ts:45:40: This type parameter might need an `extends Foo` constraint.
    }
    
    class D4<T extends Foo, U extends Foo, V> extends B1<T> {
        [x: string]: T;
        foo: T; // ok
    }
    
    class D5<T extends Foo, U extends Foo, V> extends B1<T> {
        [x: string]: T;
        foo: U; // error
        ~~~
!!! error TS2411: Property 'foo' of type 'U' is not assignable to 'string' index type 'T'.
        ~~~
!!! error TS2416: Property 'foo' in type 'D5<T, U, V>' is not assignable to the same property in base type 'B1<T>'.
!!! error TS2416:   Type 'U' is not assignable to type 'T'.
!!! error TS2416:     'U' is assignable to the constraint of type 'T', but 'T' could be instantiated with a different subtype of constraint 'Foo'.
    }
    
    class D6<T extends Foo, U extends Foo, V> extends B1<T> {
        [x: string]: T;
        foo: V; // error
        ~~~
!!! error TS2411: Property 'foo' of type 'V' is not assignable to 'string' index type 'T'.
        ~~~
!!! error TS2416: Property 'foo' in type 'D6<T, U, V>' is not assignable to the same property in base type 'B1<T>'.
!!! error TS2416:   Type 'V' is not assignable to type 'T'.
!!! error TS2416:     'T' could be instantiated with an arbitrary type which could be unrelated to 'V'.
!!! related TS2208 tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypesOfTypeParameterWithConstraints4.ts:60:40: This type parameter might need an `extends T` constraint.
    }
    
    class D7<T extends Foo, U extends Foo, V> extends B1<U> {
        [x: string]: U;
        foo: T; // error
        ~~~
!!! error TS2411: Property 'foo' of type 'T' is not assignable to 'string' index type 'U'.
        ~~~
!!! error TS2416: Property 'foo' in type 'D7<T, U, V>' is not assignable to the same property in base type 'B1<U>'.
!!! error TS2416:   Type 'T' is not assignable to type 'U'.
!!! error TS2416:     'T' is assignable to the constraint of type 'U', but 'U' could be instantiated with a different subtype of constraint 'Foo'.
    }
    
    class D8<T extends Foo, U extends Foo, V> extends B1<U> {
        [x: string]: U;
        foo: U; // ok
    }
    
    class D9<T extends Foo, U extends Foo, V> extends B1<U> {
        [x: string]: U;
        foo: V; // error
        ~~~
!!! error TS2411: Property 'foo' of type 'V' is not assignable to 'string' index type 'U'.
        ~~~
!!! error TS2416: Property 'foo' in type 'D9<T, U, V>' is not assignable to the same property in base type 'B1<U>'.
!!! error TS2416:   Type 'V' is not assignable to type 'U'.
!!! error TS2416:     'U' could be instantiated with an arbitrary type which could be unrelated to 'V'.
!!! related TS2208 tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypesOfTypeParameterWithConstraints4.ts:75:40: This type parameter might need an `extends U` constraint.
    }