tests/cases/conformance/types/typeRelationships/assignmentCompatibility/unionTypesAssignability.ts(18,1): error TS2741: Property 'foo1' is missing in type 'E' but required in type 'D'.
tests/cases/conformance/types/typeRelationships/assignmentCompatibility/unionTypesAssignability.ts(19,1): error TS2322: Type 'D | E' is not assignable to type 'D'.
  Type 'E' is not assignable to type 'D'.
tests/cases/conformance/types/typeRelationships/assignmentCompatibility/unionTypesAssignability.ts(20,1): error TS2741: Property 'foo2' is missing in type 'D' but required in type 'E'.
tests/cases/conformance/types/typeRelationships/assignmentCompatibility/unionTypesAssignability.ts(22,1): error TS2322: Type 'D | E' is not assignable to type 'E'.
  Type 'D' is not assignable to type 'E'.
tests/cases/conformance/types/typeRelationships/assignmentCompatibility/unionTypesAssignability.ts(24,1): error TS2322: Type 'string' is not assignable to type 'number'.
tests/cases/conformance/types/typeRelationships/assignmentCompatibility/unionTypesAssignability.ts(25,1): error TS2322: Type 'string | number' is not assignable to type 'number'.
  Type 'string' is not assignable to type 'number'.
tests/cases/conformance/types/typeRelationships/assignmentCompatibility/unionTypesAssignability.ts(26,1): error TS2322: Type 'number' is not assignable to type 'string'.
tests/cases/conformance/types/typeRelationships/assignmentCompatibility/unionTypesAssignability.ts(28,1): error TS2322: Type 'string | number' is not assignable to type 'string'.
  Type 'number' is not assignable to type 'string'.
tests/cases/conformance/types/typeRelationships/assignmentCompatibility/unionTypesAssignability.ts(31,1): error TS2741: Property 'foo1' is missing in type 'C' but required in type 'D'.
tests/cases/conformance/types/typeRelationships/assignmentCompatibility/unionTypesAssignability.ts(32,1): error TS2741: Property 'foo2' is missing in type 'C' but required in type 'E'.
tests/cases/conformance/types/typeRelationships/assignmentCompatibility/unionTypesAssignability.ts(33,1): error TS2322: Type 'C' is not assignable to type 'D | E'.
tests/cases/conformance/types/typeRelationships/assignmentCompatibility/unionTypesAssignability.ts(35,1): error TS2322: Type 'D' is not assignable to type 'E'.
tests/cases/conformance/types/typeRelationships/assignmentCompatibility/unionTypesAssignability.ts(37,1): error TS2322: Type 'E' is not assignable to type 'D'.
tests/cases/conformance/types/typeRelationships/assignmentCompatibility/unionTypesAssignability.ts(41,1): error TS2322: Type 'number' is not assignable to type 'string'.
tests/cases/conformance/types/typeRelationships/assignmentCompatibility/unionTypesAssignability.ts(43,1): error TS2322: Type 'string' is not assignable to type 'number'.
tests/cases/conformance/types/typeRelationships/assignmentCompatibility/unionTypesAssignability.ts(64,5): error TS2322: Type 'U' is not assignable to type 'T'.
  'T' could be instantiated with an arbitrary type which could be unrelated to 'U'.
tests/cases/conformance/types/typeRelationships/assignmentCompatibility/unionTypesAssignability.ts(65,5): error TS2322: Type 'T' is not assignable to type 'U'.
  'U' could be instantiated with an arbitrary type which could be unrelated to 'T'.
tests/cases/conformance/types/typeRelationships/assignmentCompatibility/unionTypesAssignability.ts(70,5): error TS2322: Type 'T | U' is not assignable to type 'T'.
  'T' could be instantiated with an arbitrary type which could be unrelated to 'T | U'.
tests/cases/conformance/types/typeRelationships/assignmentCompatibility/unionTypesAssignability.ts(71,5): error TS2322: Type 'T | U' is not assignable to type 'U'.
  'U' could be instantiated with an arbitrary type which could be unrelated to 'T | U'.


==== tests/cases/conformance/types/typeRelationships/assignmentCompatibility/unionTypesAssignability.ts (19 errors) ====
    var unionNumberString: number | string;
    class C { }
    class D extends C { foo1() { } }
    class E extends C { foo2() { } }
    var unionDE: D | E;
    
    var num: number;
    var str: string;
    var c: C;
    var d: D;
    var e: E;
    
    // A union type U is assignable to a type T if each type in U is assignable to T
    c = d;
    c = e;
    c = unionDE; // ok
    d = d;
    d = e;
    ~
!!! error TS2741: Property 'foo1' is missing in type 'E' but required in type 'D'.
!!! related TS2728 tests/cases/conformance/types/typeRelationships/assignmentCompatibility/unionTypesAssignability.ts:3:21: 'foo1' is declared here.
    d = unionDE; // error e is not assignable to d
    ~
!!! error TS2322: Type 'D | E' is not assignable to type 'D'.
!!! error TS2322:   Type 'E' is not assignable to type 'D'.
    e = d;
    ~
!!! error TS2741: Property 'foo2' is missing in type 'D' but required in type 'E'.
!!! related TS2728 tests/cases/conformance/types/typeRelationships/assignmentCompatibility/unionTypesAssignability.ts:4:21: 'foo2' is declared here.
    e = e;
    e = unionDE; // error d is not assignable to e
    ~
!!! error TS2322: Type 'D | E' is not assignable to type 'E'.
!!! error TS2322:   Type 'D' is not assignable to type 'E'.
    num = num;
    num = str;
    ~~~
!!! error TS2322: Type 'string' is not assignable to type 'number'.
    num = unionNumberString; // error string is not assignable to number
    ~~~
!!! error TS2322: Type 'string | number' is not assignable to type 'number'.
!!! error TS2322:   Type 'string' is not assignable to type 'number'.
    str = num;
    ~~~
!!! error TS2322: Type 'number' is not assignable to type 'string'.
    str = str;
    str = unionNumberString; // error since number is not assignable to string
    ~~~
!!! error TS2322: Type 'string | number' is not assignable to type 'string'.
!!! error TS2322:   Type 'number' is not assignable to type 'string'.
    
    // A type T is assignable to a union type U if T is assignable to any type in U
    d = c;
    ~
!!! error TS2741: Property 'foo1' is missing in type 'C' but required in type 'D'.
!!! related TS2728 tests/cases/conformance/types/typeRelationships/assignmentCompatibility/unionTypesAssignability.ts:3:21: 'foo1' is declared here.
    e = c;
    ~
!!! error TS2741: Property 'foo2' is missing in type 'C' but required in type 'E'.
!!! related TS2728 tests/cases/conformance/types/typeRelationships/assignmentCompatibility/unionTypesAssignability.ts:4:21: 'foo2' is declared here.
    unionDE = c; // error since C is not assinable to either D or E
    ~~~~~~~
!!! error TS2322: Type 'C' is not assignable to type 'D | E'.
    d = d;
    e = d;
    ~
!!! error TS2322: Type 'D' is not assignable to type 'E'.
    unionDE = d; // ok
    d = e;
    ~
!!! error TS2322: Type 'E' is not assignable to type 'D'.
    e = e;
    unionDE = e; // ok
    num = num;
    str = num;
    ~~~
!!! error TS2322: Type 'number' is not assignable to type 'string'.
    unionNumberString = num; // ok 
    num = str;
    ~~~
!!! error TS2322: Type 'string' is not assignable to type 'number'.
    str = str;
    unionNumberString = str; // ok
    
    // Any
    var anyVar: any;
    anyVar = unionDE;
    anyVar = unionNumberString;
    unionDE = anyVar;
    unionNumberString = anyVar;
    
    // null
    unionDE = null;
    unionNumberString = null;
    
    // undefined
    unionDE = undefined;
    unionNumberString = undefined;
    
    // type parameters
    function foo<T, U>(t: T, u: U) {
        t = u; // error
        ~
!!! error TS2322: Type 'U' is not assignable to type 'T'.
!!! error TS2322:   'T' could be instantiated with an arbitrary type which could be unrelated to 'U'.
!!! related TS2208 tests/cases/conformance/types/typeRelationships/assignmentCompatibility/unionTypesAssignability.ts:63:17: This type parameter might need an `extends T` constraint.
        u = t; // error
        ~
!!! error TS2322: Type 'T' is not assignable to type 'U'.
!!! error TS2322:   'U' could be instantiated with an arbitrary type which could be unrelated to 'T'.
!!! related TS2208 tests/cases/conformance/types/typeRelationships/assignmentCompatibility/unionTypesAssignability.ts:63:14: This type parameter might need an `extends U` constraint.
        var x : T | U;
        x = t; // ok
        x = u; // ok
        x = undefined;
        t = x; // error U not assignable to T
        ~
!!! error TS2322: Type 'T | U' is not assignable to type 'T'.
!!! error TS2322:   'T' could be instantiated with an arbitrary type which could be unrelated to 'T | U'.
!!! related TS2208 tests/cases/conformance/types/typeRelationships/assignmentCompatibility/unionTypesAssignability.ts:63:17: This type parameter might need an `extends T` constraint.
        u = x; // error T not assignable to U
        ~
!!! error TS2322: Type 'T | U' is not assignable to type 'U'.
!!! error TS2322:   'U' could be instantiated with an arbitrary type which could be unrelated to 'T | U'.
!!! related TS2208 tests/cases/conformance/types/typeRelationships/assignmentCompatibility/unionTypesAssignability.ts:63:14: This type parameter might need an `extends U` constraint.
    }
    