==== tests/cases/compiler/subtypesOfTypeParameterWithRecursiveConstraints.ts (99 errors) ====
    // checking whether other types are subtypes of type parameters with constraints
    
    class Foo<T> { foo: T; }
    function f<T extends Foo<U>, U extends Foo<T>, V extends Foo<V>>(t: T, u: U, v: V) {
               ~~~~~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(4,12): error TS2229: Constraint of a type parameter cannot reference any type parameter from the same type parameter list.
                                 ~~~~~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(4,30): error TS2229: Constraint of a type parameter cannot reference any type parameter from the same type parameter list.
                                                   ~~~~~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(4,48): error TS2229: Constraint of a type parameter cannot reference any type parameter from the same type parameter list.
        // error
        var r1 = true ? t : u;
                 ~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(6,14): error TS2226: Type of conditional '{}' must be identical to 'T' or 'U'.
        var r1 = true ? u : t;
                 ~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(7,14): error TS2226: Type of conditional '{}' must be identical to 'U' or 'T'.
    
        // error
        var r2 = true ? t : v;
                 ~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(10,14): error TS2226: Type of conditional '{}' must be identical to 'T' or 'V'.
        var r2 = true ? v : t;
                 ~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(11,14): error TS2226: Type of conditional '{}' must be identical to 'V' or 'T'.
    
        // error
        var r3 = true ? v : u;
                 ~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(14,14): error TS2226: Type of conditional '{}' must be identical to 'V' or 'U'.
        var r3 = true ? u : v;
                 ~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(15,14): error TS2226: Type of conditional '{}' must be identical to 'U' or 'V'.
    
        // ok?
        var r4 = true ? t : new Foo<T>();
                 ~~~~~~~~~~~~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(18,14): error TS2226: Type of conditional '{}' must be identical to 'T' or 'Foo<T>'.
        var r4 = true ? new Foo<T>() : t;
                 ~~~~~~~~~~~~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(19,14): error TS2226: Type of conditional '{}' must be identical to 'Foo<T>' or 'T'.
    
        // ok?
        var r5 = true ? u : new Foo<T>();
        var r5 = true ? new Foo<T>() : u;
    
        // ok?
        var r6 = true ? v : new Foo<T>();
                 ~~~~~~~~~~~~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(26,14): error TS2226: Type of conditional '{}' must be identical to 'V' or 'Foo<T>'.
        var r6 = true ? new Foo<T>() : v;
                 ~~~~~~~~~~~~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(27,14): error TS2226: Type of conditional '{}' must be identical to 'Foo<T>' or 'V'.
    
    
        // ok?
        var r7 = true ? t : new Foo<U>();
        var r7 = true ? new Foo<U>() : t;
    
        // ok?
        var r8 = true ? u : new Foo<U>();
                 ~~~~~~~~~~~~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(35,14): error TS2226: Type of conditional '{}' must be identical to 'U' or 'Foo<U>'.
        var r8 = true ? new Foo<U>() : u;
                 ~~~~~~~~~~~~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(36,14): error TS2226: Type of conditional '{}' must be identical to 'Foo<U>' or 'U'.
    
        // ok?
        var r9 = true ? v : new Foo<U>();
                 ~~~~~~~~~~~~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(39,14): error TS2226: Type of conditional '{}' must be identical to 'V' or 'Foo<U>'.
        var r9 = true ? new Foo<U>() : v;
                 ~~~~~~~~~~~~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(40,14): error TS2226: Type of conditional '{}' must be identical to 'Foo<U>' or 'V'.
    
    
        // ok?
        var r10 = true ? t : new Foo<V>();
                  ~~~~~~~~~~~~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(44,15): error TS2226: Type of conditional '{}' must be identical to 'T' or 'Foo<V>'.
        var r10 = true ? new Foo<V>() : t;
                  ~~~~~~~~~~~~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(45,15): error TS2226: Type of conditional '{}' must be identical to 'Foo<V>' or 'T'.
    
        // ok?
        var r11 = true ? u : new Foo<V>();
                  ~~~~~~~~~~~~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(48,15): error TS2226: Type of conditional '{}' must be identical to 'U' or 'Foo<V>'.
        var r11 = true ? new Foo<V>() : u;
                  ~~~~~~~~~~~~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(49,15): error TS2226: Type of conditional '{}' must be identical to 'Foo<V>' or 'U'.
    
        // ok?
        var r12 = true ? v : new Foo<V>();
        var r12 = true ? new Foo<V>() : v;
    }
    
    module M1 {
        class Base<T> {
            foo: T;
        }
    
        class D1<T extends Foo<U>, U extends Foo<T>, V extends Foo<V>> extends Base<T> {
                 ~~~~~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(61,14): error TS2229: Constraint of a type parameter cannot reference any type parameter from the same type parameter list.
                                   ~~~~~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(61,32): error TS2229: Constraint of a type parameter cannot reference any type parameter from the same type parameter list.
                                                     ~~~~~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(61,50): error TS2229: Constraint of a type parameter cannot reference any type parameter from the same type parameter list.
            [x: string]: T;
            foo: T
        }
    
        class D2<T extends Foo<U>, U extends Foo<T>, V extends Foo<V>> extends Base<T> {
              ~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(66,11): error TS2141: Class 'M1.D2<T, U, V>' cannot extend class 'M1.Base<T>':
!!! 	Types of property 'foo' of types 'D2<T, U, V>' and 'Base<T>' are incompatible.
                 ~~~~~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(66,14): error TS2229: Constraint of a type parameter cannot reference any type parameter from the same type parameter list.
                                   ~~~~~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(66,32): error TS2229: Constraint of a type parameter cannot reference any type parameter from the same type parameter list.
                                                     ~~~~~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(66,50): error TS2229: Constraint of a type parameter cannot reference any type parameter from the same type parameter list.
            [x: string]: T;
            foo: U
            ~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(68,9): error TS2171: All named properties must be assignable to string indexer type 'T'.
        }
    
        class D3<T extends Foo<U>, U extends Foo<T>, V extends Foo<V>> extends Base<T> {
              ~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(71,11): error TS2141: Class 'M1.D3<T, U, V>' cannot extend class 'M1.Base<T>':
!!! 	Types of property 'foo' of types 'D3<T, U, V>' and 'Base<T>' are incompatible.
                 ~~~~~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(71,14): error TS2229: Constraint of a type parameter cannot reference any type parameter from the same type parameter list.
                                   ~~~~~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(71,32): error TS2229: Constraint of a type parameter cannot reference any type parameter from the same type parameter list.
                                                     ~~~~~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(71,50): error TS2229: Constraint of a type parameter cannot reference any type parameter from the same type parameter list.
            [x: string]: T;
            foo: V
            ~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(73,9): error TS2171: All named properties must be assignable to string indexer type 'T'.
        }
    
        class D4<T extends Foo<U>, U extends Foo<T>, V extends Foo<V>> extends Base<U> {
              ~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(76,11): error TS2141: Class 'M1.D4<T, U, V>' cannot extend class 'M1.Base<U>':
!!! 	Types of property 'foo' of types 'D4<T, U, V>' and 'Base<U>' are incompatible.
                 ~~~~~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(76,14): error TS2229: Constraint of a type parameter cannot reference any type parameter from the same type parameter list.
                                   ~~~~~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(76,32): error TS2229: Constraint of a type parameter cannot reference any type parameter from the same type parameter list.
                                                     ~~~~~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(76,50): error TS2229: Constraint of a type parameter cannot reference any type parameter from the same type parameter list.
            [x: string]: U;
            foo: T
            ~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(78,9): error TS2171: All named properties must be assignable to string indexer type 'U'.
        }
    
        class D5<T extends Foo<U>, U extends Foo<T>, V extends Foo<V>> extends Base<U> {
                 ~~~~~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(81,14): error TS2229: Constraint of a type parameter cannot reference any type parameter from the same type parameter list.
                                   ~~~~~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(81,32): error TS2229: Constraint of a type parameter cannot reference any type parameter from the same type parameter list.
                                                     ~~~~~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(81,50): error TS2229: Constraint of a type parameter cannot reference any type parameter from the same type parameter list.
            [x: string]: U;
            foo: U
        }
    
        class D6<T extends Foo<U>, U extends Foo<T>, V extends Foo<V>> extends Base<U> {
              ~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(86,11): error TS2141: Class 'M1.D6<T, U, V>' cannot extend class 'M1.Base<U>':
!!! 	Types of property 'foo' of types 'D6<T, U, V>' and 'Base<U>' are incompatible.
                 ~~~~~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(86,14): error TS2229: Constraint of a type parameter cannot reference any type parameter from the same type parameter list.
                                   ~~~~~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(86,32): error TS2229: Constraint of a type parameter cannot reference any type parameter from the same type parameter list.
                                                     ~~~~~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(86,50): error TS2229: Constraint of a type parameter cannot reference any type parameter from the same type parameter list.
            [x: string]: U;
            foo: V
            ~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(88,9): error TS2171: All named properties must be assignable to string indexer type 'U'.
        }
    
        class D7<T extends Foo<U>, U extends Foo<T>, V extends Foo<V>> extends Base<V> {
              ~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(91,11): error TS2141: Class 'M1.D7<T, U, V>' cannot extend class 'M1.Base<V>':
!!! 	Types of property 'foo' of types 'D7<T, U, V>' and 'Base<V>' are incompatible.
                 ~~~~~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(91,14): error TS2229: Constraint of a type parameter cannot reference any type parameter from the same type parameter list.
                                   ~~~~~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(91,32): error TS2229: Constraint of a type parameter cannot reference any type parameter from the same type parameter list.
                                                     ~~~~~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(91,50): error TS2229: Constraint of a type parameter cannot reference any type parameter from the same type parameter list.
            [x: string]: V;
            foo: T
            ~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(93,9): error TS2171: All named properties must be assignable to string indexer type 'V'.
        }
    
        class D8<T extends Foo<U>, U extends Foo<T>, V extends Foo<V>> extends Base<V> {
              ~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(96,11): error TS2141: Class 'M1.D8<T, U, V>' cannot extend class 'M1.Base<V>':
!!! 	Types of property 'foo' of types 'D8<T, U, V>' and 'Base<V>' are incompatible.
                 ~~~~~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(96,14): error TS2229: Constraint of a type parameter cannot reference any type parameter from the same type parameter list.
                                   ~~~~~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(96,32): error TS2229: Constraint of a type parameter cannot reference any type parameter from the same type parameter list.
                                                     ~~~~~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(96,50): error TS2229: Constraint of a type parameter cannot reference any type parameter from the same type parameter list.
            [x: string]: V;
            foo: U
            ~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(98,9): error TS2171: All named properties must be assignable to string indexer type 'V'.
        }
    
        class D9<T extends Foo<U>, U extends Foo<T>, V extends Foo<V>> extends Base<V> {
                 ~~~~~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(101,14): error TS2229: Constraint of a type parameter cannot reference any type parameter from the same type parameter list.
                                   ~~~~~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(101,32): error TS2229: Constraint of a type parameter cannot reference any type parameter from the same type parameter list.
                                                     ~~~~~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(101,50): error TS2229: Constraint of a type parameter cannot reference any type parameter from the same type parameter list.
            [x: string]: V;
            foo: V
        }
    }
    
    
    module M2 {
        class Base2<T> {
            foo: Foo<T>;
        }
    
        class D1<T extends Foo<U>, U extends Foo<T>, V extends Foo<V>> extends Base2<T> {
              ~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(113,11): error TS2141: Class 'M2.D1<T, U, V>' cannot extend class 'M2.Base2<T>':
!!! 	Types of property 'foo' of types 'D1<T, U, V>' and 'Base2<T>' are incompatible:
!!! 		Types of property 'foo' of types 'Foo<U>' and 'Foo<T>' are incompatible.
                 ~~~~~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(113,14): error TS2229: Constraint of a type parameter cannot reference any type parameter from the same type parameter list.
                                   ~~~~~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(113,32): error TS2229: Constraint of a type parameter cannot reference any type parameter from the same type parameter list.
                                                     ~~~~~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(113,50): error TS2229: Constraint of a type parameter cannot reference any type parameter from the same type parameter list.
            [x: string]: T;
            foo: T
        }
    
        class D2<T extends Foo<U>, U extends Foo<T>, V extends Foo<V>> extends Base2<T> {
                 ~~~~~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(118,14): error TS2229: Constraint of a type parameter cannot reference any type parameter from the same type parameter list.
                                   ~~~~~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(118,32): error TS2229: Constraint of a type parameter cannot reference any type parameter from the same type parameter list.
                                                     ~~~~~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(118,50): error TS2229: Constraint of a type parameter cannot reference any type parameter from the same type parameter list.
            [x: string]: T;
            foo: U
            ~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(120,9): error TS2171: All named properties must be assignable to string indexer type 'T'.
        }
    
        class D3<T extends Foo<U>, U extends Foo<T>, V extends Foo<V>> extends Base2<T> {
              ~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(123,11): error TS2141: Class 'M2.D3<T, U, V>' cannot extend class 'M2.Base2<T>':
!!! 	Types of property 'foo' of types 'D3<T, U, V>' and 'Base2<T>' are incompatible:
!!! 		Types of property 'foo' of types 'Foo<V>' and 'Foo<T>' are incompatible.
                 ~~~~~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(123,14): error TS2229: Constraint of a type parameter cannot reference any type parameter from the same type parameter list.
                                   ~~~~~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(123,32): error TS2229: Constraint of a type parameter cannot reference any type parameter from the same type parameter list.
                                                     ~~~~~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(123,50): error TS2229: Constraint of a type parameter cannot reference any type parameter from the same type parameter list.
            [x: string]: T;
            foo: V
            ~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(125,9): error TS2171: All named properties must be assignable to string indexer type 'T'.
        }
    
        class D4<T extends Foo<U>, U extends Foo<T>, V extends Foo<V>> extends Base2<U> {
                 ~~~~~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(128,14): error TS2229: Constraint of a type parameter cannot reference any type parameter from the same type parameter list.
                                   ~~~~~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(128,32): error TS2229: Constraint of a type parameter cannot reference any type parameter from the same type parameter list.
                                                     ~~~~~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(128,50): error TS2229: Constraint of a type parameter cannot reference any type parameter from the same type parameter list.
            [x: string]: U;
            foo: T
            ~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(130,9): error TS2171: All named properties must be assignable to string indexer type 'U'.
        }
    
        class D5<T extends Foo<U>, U extends Foo<T>, V extends Foo<V>> extends Base2<U> {
              ~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(133,11): error TS2141: Class 'M2.D5<T, U, V>' cannot extend class 'M2.Base2<U>':
!!! 	Types of property 'foo' of types 'D5<T, U, V>' and 'Base2<U>' are incompatible:
!!! 		Types of property 'foo' of types 'Foo<T>' and 'Foo<U>' are incompatible.
                 ~~~~~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(133,14): error TS2229: Constraint of a type parameter cannot reference any type parameter from the same type parameter list.
                                   ~~~~~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(133,32): error TS2229: Constraint of a type parameter cannot reference any type parameter from the same type parameter list.
                                                     ~~~~~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(133,50): error TS2229: Constraint of a type parameter cannot reference any type parameter from the same type parameter list.
            [x: string]: U;
            foo: U
        }
    
        class D6<T extends Foo<U>, U extends Foo<T>, V extends Foo<V>> extends Base2<U> {
              ~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(138,11): error TS2141: Class 'M2.D6<T, U, V>' cannot extend class 'M2.Base2<U>':
!!! 	Types of property 'foo' of types 'D6<T, U, V>' and 'Base2<U>' are incompatible:
!!! 		Types of property 'foo' of types 'Foo<V>' and 'Foo<U>' are incompatible.
                 ~~~~~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(138,14): error TS2229: Constraint of a type parameter cannot reference any type parameter from the same type parameter list.
                                   ~~~~~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(138,32): error TS2229: Constraint of a type parameter cannot reference any type parameter from the same type parameter list.
                                                     ~~~~~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(138,50): error TS2229: Constraint of a type parameter cannot reference any type parameter from the same type parameter list.
            [x: string]: U;
            foo: V
            ~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(140,9): error TS2171: All named properties must be assignable to string indexer type 'U'.
        }
    
        class D7<T extends Foo<U>, U extends Foo<T>, V extends Foo<V>> extends Base2<V> {
              ~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(143,11): error TS2141: Class 'M2.D7<T, U, V>' cannot extend class 'M2.Base2<V>':
!!! 	Types of property 'foo' of types 'D7<T, U, V>' and 'Base2<V>' are incompatible:
!!! 		Types of property 'foo' of types 'Foo<U>' and 'Foo<V>' are incompatible.
                 ~~~~~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(143,14): error TS2229: Constraint of a type parameter cannot reference any type parameter from the same type parameter list.
                                   ~~~~~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(143,32): error TS2229: Constraint of a type parameter cannot reference any type parameter from the same type parameter list.
                                                     ~~~~~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(143,50): error TS2229: Constraint of a type parameter cannot reference any type parameter from the same type parameter list.
            [x: string]: V;
            foo: T
            ~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(145,9): error TS2171: All named properties must be assignable to string indexer type 'V'.
        }
    
        class D8<T extends Foo<U>, U extends Foo<T>, V extends Foo<V>> extends Base2<V> {
              ~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(148,11): error TS2141: Class 'M2.D8<T, U, V>' cannot extend class 'M2.Base2<V>':
!!! 	Types of property 'foo' of types 'D8<T, U, V>' and 'Base2<V>' are incompatible:
!!! 		Types of property 'foo' of types 'Foo<T>' and 'Foo<V>' are incompatible.
                 ~~~~~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(148,14): error TS2229: Constraint of a type parameter cannot reference any type parameter from the same type parameter list.
                                   ~~~~~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(148,32): error TS2229: Constraint of a type parameter cannot reference any type parameter from the same type parameter list.
                                                     ~~~~~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(148,50): error TS2229: Constraint of a type parameter cannot reference any type parameter from the same type parameter list.
            [x: string]: V;
            foo: U
            ~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(150,9): error TS2171: All named properties must be assignable to string indexer type 'V'.
        }
    
        class D9<T extends Foo<U>, U extends Foo<T>, V extends Foo<V>> extends Base2<V> {
                 ~~~~~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(153,14): error TS2229: Constraint of a type parameter cannot reference any type parameter from the same type parameter list.
                                   ~~~~~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(153,32): error TS2229: Constraint of a type parameter cannot reference any type parameter from the same type parameter list.
                                                     ~~~~~~~~~~~~~~~~
!!! subtypesOfTypeParameterWithRecursiveConstraints.ts(153,50): error TS2229: Constraint of a type parameter cannot reference any type parameter from the same type parameter list.
            [x: string]: V;
            foo: V
        }
    }