tests/cases/conformance/types/typeRelationships/assignmentCompatibility/unionTypesAssignability.ts(18,1): error TS2322: Type 'E' is not assignable to type 'D'. Property 'foo1' is missing in type 'E'. 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 TS2322: Type 'D' is not assignable to type 'E'. Property 'foo2' is missing in type 'D'. 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 TS2322: Type 'C' is not assignable to type 'D'. Property 'foo1' is missing in type 'C'. tests/cases/conformance/types/typeRelationships/assignmentCompatibility/unionTypesAssignability.ts(32,1): error TS2322: Type 'C' is not assignable to type 'E'. Property 'foo2' is missing in type 'C'. tests/cases/conformance/types/typeRelationships/assignmentCompatibility/unionTypesAssignability.ts(33,1): error TS2322: Type 'C' is not assignable to type 'D | E'. Type 'C' is not assignable to type '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'. tests/cases/conformance/types/typeRelationships/assignmentCompatibility/unionTypesAssignability.ts(65,5): error TS2322: Type 'T' is not assignable to type 'U'. tests/cases/conformance/types/typeRelationships/assignmentCompatibility/unionTypesAssignability.ts(69,5): error TS2322: Type 'T | U' is not assignable to type 'T'. Type 'U' is not assignable to type 'T'. tests/cases/conformance/types/typeRelationships/assignmentCompatibility/unionTypesAssignability.ts(70,5): error TS2322: Type 'T | U' is not assignable to type 'U'. Type 'T' is not assignable to type '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 TS2322: Type 'E' is not assignable to type 'D'. !!! error TS2322: Property 'foo1' is missing in type 'E'. 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 TS2322: Type 'D' is not assignable to type 'E'. !!! error TS2322: Property 'foo2' is missing in type 'D'. 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 TS2322: Type 'C' is not assignable to type 'D'. !!! error TS2322: Property 'foo1' is missing in type 'C'. e = c; ~ !!! error TS2322: Type 'C' is not assignable to type 'E'. !!! error TS2322: Property 'foo2' is missing in type 'C'. unionDE = c; // error since C is not assinable to either D or E ~~~~~~~ !!! error TS2322: Type 'C' is not assignable to type 'D | E'. !!! error TS2322: Type 'C' is not assignable to type '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: T, u: U) { t = u; // error ~ !!! error TS2322: Type 'U' is not assignable to type 'T'. u = t; // error ~ !!! error TS2322: Type 'T' is not assignable to type 'U'. var x : T | U; x = t; // ok x = u; // ok t = x; // error U not assignable to T ~ !!! error TS2322: Type 'T | U' is not assignable to type 'T'. !!! error TS2322: Type 'U' is not assignable to type 'T'. u = x; // error T not assignable to U ~ !!! error TS2322: Type 'T | U' is not assignable to type 'U'. !!! error TS2322: Type 'T' is not assignable to type 'U'. }