TypeScript/tests/baselines/reference/intersectionAndUnionTypes.types
Anders Hejlsberg 6aeb8c12cc
Preserve type aliases for union and intersection types (#42149)
* Create separate types for equivalent aliased unions

* Accept new baselines

* Preserve original types for union types

* Accept new baselines

* Preserve intersection origin for union types

* Accept new baselines

* Accept new baselines

* Preserve aliases during relationship checks

* Accept new baselines

* Preserve aliases for intersection and indexed access types

* Accept new baselines

* Compute intersection-of-unions cross product without recursion

* Accept new baselines

* Use denormalized type objects for origin / support 'keyof' origins

* Accept new baselines

* Fix fourslash test

* Recursively extract named union types

* Accept new baselines

* Map on union origin in mapType to better preserve aliases and origins

* Remove redundant call

* Accept new baselines

* Revert back to declared type when branches produce equivalent union

* Accept new baselines

* Don't include denormal origin types in regular type statistics

* Fix issue with unions not being marked primitive-only

* Allow new alias to be associated with type alias instantiation

* Accept new baselines

* Revert "Accept new baselines"

This reverts commit 4507270cc1.

* Revert "Allow new alias to be associated with type alias instantiation"

This reverts commit 2c2d06dfe1.
2021-01-08 15:19:58 -10:00

144 lines
1.9 KiB
Plaintext

=== tests/cases/conformance/types/intersection/intersectionAndUnionTypes.ts ===
interface A { a: string }
>a : string
interface B { b: string }
>b : string
interface C { c: string }
>c : string
interface D { d: string }
>d : string
var a: A;
>a : A
var b: B;
>b : B
var c: C;
>c : C
var d: D;
>d : D
var anb: A & B;
>anb : A & B
var aob: A | B;
>aob : A | B
var cnd: C & D;
>cnd : C & D
var cod: C | D;
>cod : C | D
var x: A & B | C & D;
>x : (A & B) | (C & D)
var y: (A | B) & (C | D);
>y : (A | B) & (C | D)
a = anb; // Ok
>a = anb : A & B
>a : A
>anb : A & B
b = anb; // Ok
>b = anb : A & B
>b : B
>anb : A & B
anb = a;
>anb = a : A
>anb : A & B
>a : A
anb = b;
>anb = b : B
>anb : A & B
>b : B
x = anb; // Ok
>x = anb : A & B
>x : (A & B) | (C & D)
>anb : A & B
x = aob;
>x = aob : A | B
>x : (A & B) | (C & D)
>aob : A | B
x = cnd; // Ok
>x = cnd : C & D
>x : (A & B) | (C & D)
>cnd : C & D
x = cod;
>x = cod : C | D
>x : (A & B) | (C & D)
>cod : C | D
anb = x;
>anb = x : (A & B) | (C & D)
>anb : A & B
>x : (A & B) | (C & D)
aob = x;
>aob = x : (A & B) | (C & D)
>aob : A | B
>x : (A & B) | (C & D)
cnd = x;
>cnd = x : (A & B) | (C & D)
>cnd : C & D
>x : (A & B) | (C & D)
cod = x;
>cod = x : (A & B) | (C & D)
>cod : C | D
>x : (A & B) | (C & D)
y = anb;
>y = anb : A & B
>y : (A | B) & (C | D)
>anb : A & B
y = aob;
>y = aob : A | B
>y : (A | B) & (C | D)
>aob : A | B
y = cnd;
>y = cnd : C & D
>y : (A | B) & (C | D)
>cnd : C & D
y = cod;
>y = cod : C | D
>y : (A | B) & (C | D)
>cod : C | D
anb = y;
>anb = y : (A | B) & (C | D)
>anb : A & B
>y : (A | B) & (C | D)
aob = y; // Ok
>aob = y : (A | B) & (C | D)
>aob : A | B
>y : (A | B) & (C | D)
cnd = y;
>cnd = y : (A | B) & (C | D)
>cnd : C & D
>y : (A | B) & (C | D)
cod = y; // Ok
>cod = y : (A | B) & (C | D)
>cod : C | D
>y : (A | B) & (C | D)