1f3653b32e
• A union type U is assignable to a type T if each type in U is assignable to T. • A type T is assignable to a union type U if T is assignable to any type in U.
154 lines
No EOL
7.5 KiB
Text
154 lines
No EOL
7.5 KiB
Text
tests/cases/conformance/types/typeRelationships/assignmentCompatibility/unionTypesAssignability.ts(18,1): error TS2323: 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 TS2323: 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 TS2323: 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 TS2323: 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 TS2323: Type 'string' is not assignable to type 'number'.
|
|
tests/cases/conformance/types/typeRelationships/assignmentCompatibility/unionTypesAssignability.ts(25,1): error TS2323: 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 TS2323: Type 'number' is not assignable to type 'string'.
|
|
tests/cases/conformance/types/typeRelationships/assignmentCompatibility/unionTypesAssignability.ts(28,1): error TS2323: 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 TS2323: 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 TS2323: 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 TS2323: 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 TS2323: Type 'D' is not assignable to type 'E'.
|
|
tests/cases/conformance/types/typeRelationships/assignmentCompatibility/unionTypesAssignability.ts(37,1): error TS2323: Type 'E' is not assignable to type 'D'.
|
|
tests/cases/conformance/types/typeRelationships/assignmentCompatibility/unionTypesAssignability.ts(41,1): error TS2323: Type 'number' is not assignable to type 'string'.
|
|
tests/cases/conformance/types/typeRelationships/assignmentCompatibility/unionTypesAssignability.ts(43,1): error TS2323: Type 'string' is not assignable to type 'number'.
|
|
tests/cases/conformance/types/typeRelationships/assignmentCompatibility/unionTypesAssignability.ts(64,5): error TS2323: Type 'U' is not assignable to type 'T'.
|
|
tests/cases/conformance/types/typeRelationships/assignmentCompatibility/unionTypesAssignability.ts(65,5): error TS2323: Type 'T' is not assignable to type 'U'.
|
|
tests/cases/conformance/types/typeRelationships/assignmentCompatibility/unionTypesAssignability.ts(69,5): error TS2323: 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 TS2323: 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 TS2323: Type 'E' is not assignable to type 'D'.
|
|
!!! error TS2323: Property 'foo1' is missing in type 'E'.
|
|
d = unionDE; // error e is not assignable to d
|
|
~
|
|
!!! error TS2323: Type 'D | E' is not assignable to type 'D'.
|
|
!!! error TS2323: Type 'E' is not assignable to type 'D'.
|
|
e = d;
|
|
~
|
|
!!! error TS2323: Type 'D' is not assignable to type 'E'.
|
|
!!! error TS2323: Property 'foo2' is missing in type 'D'.
|
|
e = e;
|
|
e = unionDE; // error d is not assignable to e
|
|
~
|
|
!!! error TS2323: Type 'D | E' is not assignable to type 'E'.
|
|
!!! error TS2323: Type 'D' is not assignable to type 'E'.
|
|
num = num;
|
|
num = str;
|
|
~~~
|
|
!!! error TS2323: Type 'string' is not assignable to type 'number'.
|
|
num = unionNumberString; // error string is not assignable to number
|
|
~~~
|
|
!!! error TS2323: Type 'string | number' is not assignable to type 'number'.
|
|
!!! error TS2323: Type 'string' is not assignable to type 'number'.
|
|
str = num;
|
|
~~~
|
|
!!! error TS2323: Type 'number' is not assignable to type 'string'.
|
|
str = str;
|
|
str = unionNumberString; // error since number is not assignable to string
|
|
~~~
|
|
!!! error TS2323: Type 'string | number' is not assignable to type 'string'.
|
|
!!! error TS2323: 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 TS2323: Type 'C' is not assignable to type 'D'.
|
|
!!! error TS2323: Property 'foo1' is missing in type 'C'.
|
|
e = c;
|
|
~
|
|
!!! error TS2323: Type 'C' is not assignable to type 'E'.
|
|
!!! error TS2323: Property 'foo2' is missing in type 'C'.
|
|
unionDE = c; // error since C is not assinable to either D or E
|
|
~~~~~~~
|
|
!!! error TS2323: Type 'C' is not assignable to type 'D | E'.
|
|
!!! error TS2323: Type 'C' is not assignable to type 'E'.
|
|
d = d;
|
|
e = d;
|
|
~
|
|
!!! error TS2323: Type 'D' is not assignable to type 'E'.
|
|
unionDE = d; // ok
|
|
d = e;
|
|
~
|
|
!!! error TS2323: Type 'E' is not assignable to type 'D'.
|
|
e = e;
|
|
unionDE = e; // ok
|
|
num = num;
|
|
str = num;
|
|
~~~
|
|
!!! error TS2323: Type 'number' is not assignable to type 'string'.
|
|
unionNumberString = num; // ok
|
|
num = str;
|
|
~~~
|
|
!!! error TS2323: 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 TS2323: Type 'U' is not assignable to type 'T'.
|
|
u = t; // error
|
|
~
|
|
!!! error TS2323: 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 TS2323: Type 'T | U' is not assignable to type 'T'.
|
|
!!! error TS2323: Type 'U' is not assignable to type 'T'.
|
|
u = x; // error T not assignable to U
|
|
~
|
|
!!! error TS2323: Type 'T | U' is not assignable to type 'U'.
|
|
!!! error TS2323: Type 'T' is not assignable to type 'U'.
|
|
}
|
|
|