TypeScript/tests/baselines/reference/unionTypesAssignability.errors.txt
2014-11-21 01:33:13 -08:00

154 lines
7.5 KiB
Plaintext

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, U>(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'.
}