Skip to content

Commit d7d08e6

Browse files
committed
Test for intersections and unions from microsoft#6579
1 parent 32c5af4 commit d7d08e6

File tree

1 file changed

+194
-0
lines changed

1 file changed

+194
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,194 @@
1+
type Foo = { someNumber: number, someString: string };
2+
type Email = /^[-a-z0-9~!$%^&*_=+}{\'?]+(\.[-a-z0-9~!$%^&*_=+}{\'?]+)*@([a-z0-9_][-a-z0-9_]*(\.[-a-z0-9_]+[a-z][a-z])|([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}))(:[0-9]{1,5})?$/i;
3+
type Gmail = /^[-a-z0-9~!$%^&*_=+}{\'?]+(\.[-a-z0-9~!$%^&*_=+}{\'?]+)*@gmail\.com$/i;
4+
type EmailOrGmail = Email | Gmail;
5+
type EmailAndGmail = Email & Gmail;
6+
type EmailOrFoo = Email | Foo;
7+
type EmailAndFoo = Email & Foo;
8+
9+
let bar: string = '';
10+
let someEmail = '[email protected]';
11+
let someGmail = '[email protected]';
12+
let someEmailLiteral: '[email protected]' = '[email protected]';
13+
let someGmailLiteral: '[email protected]' = '[email protected]';
14+
15+
interface User {
16+
propertyForUnion: number;
17+
usersProperty: number;
18+
}
19+
interface GmailUser {
20+
propertyForUnion: number;
21+
gmailProperty: number;
22+
}
23+
interface NonGmailUser {
24+
propertyForUnion: number;
25+
nonGmailProperty: number;
26+
}
27+
28+
interface UsersCollection {
29+
[email: Email]: User;
30+
[gmail: Gmail]: GmailUser;
31+
}
32+
let collection_0: UsersCollection = {};
33+
collection_0[bar].propertyForUnion;
34+
collection_0[bar].usersProperty;
35+
collection_0[bar].gmailProperty;
36+
37+
if (EmailOrGmail.test(bar)) {
38+
collection_0[bar].propertyForUnion;
39+
collection_0[bar].usersProperty;
40+
collection_0[bar].gmailProperty;
41+
}
42+
collection_0[<EmailOrGmail>bar].propertyForUnion;
43+
collection_0[<EmailOrGmail>bar].usersProperty;
44+
collection_0[<EmailOrGmail>bar].gmailProperty;
45+
46+
if (EmailAndGmail.test(bar)) {
47+
collection_0[bar].propertyForUnion;
48+
collection_0[bar].usersProperty;
49+
collection_0[bar].gmailProperty;
50+
}
51+
collection_0[<EmailAndGmail>bar].propertyForUnion;
52+
collection_0[<EmailAndGmail>bar].usersProperty;
53+
collection_0[<EmailAndGmail>bar].gmailProperty;
54+
55+
if (EmailOrFoo.test(bar)) {
56+
collection_0[bar].propertyForUnion;
57+
collection_0[bar].usersProperty;
58+
collection_0[bar].gmailProperty;
59+
} else {
60+
bar.someNumber;
61+
bar.someString;
62+
}
63+
collection_0[<EmailOrFoo>bar].propertyForUnion;
64+
collection_0[<EmailOrFoo>bar].usersProperty;
65+
collection_0[<EmailOrFoo>bar].gmailProperty;
66+
67+
68+
interface UsersCollectionWithError_1 {
69+
[email: Email]: User;
70+
[gmail: EmailAndGmail]: GmailUser;
71+
}
72+
interface UsersCollectionWithoutError_1 {
73+
[email: Email]: User;
74+
[gmail: EmailAndGmail]: User & GmailUser;
75+
}
76+
let collection_1: UsersCollectionWithoutError_1 = {};
77+
collection_0['[email protected]'].propertyForUnion;
78+
collection_0['[email protected]'].usersProperty;
79+
collection_0['[email protected]'].gmailProperty;
80+
collection_0['[email protected]'].propertyForUnion;
81+
collection_0['[email protected]'].usersProperty;
82+
collection_0['[email protected]'].gmailProperty;
83+
collection_0[someEmail].propertyForUnion;
84+
collection_0[someEmail].usersProperty;
85+
collection_0[someEmail].gmailProperty;
86+
collection_0[someGmail].propertyForUnion;
87+
collection_0[someGmail].usersProperty;
88+
collection_0[someGmail].gmailProperty;
89+
collection_0[<Email>someEmail].propertyForUnion;
90+
collection_0[<Email>someEmail].usersProperty;
91+
collection_0[<Email>someEmail].gmailProperty;
92+
collection_0[<EmailAndGmail>someGmail].propertyForUnion;
93+
collection_0[<EmailAndGmail>someGmail].usersProperty;
94+
collection_0[<EmailAndGmail>someGmail].gmailProperty;
95+
collection_0[someEmailLiteral].propertyForUnion;
96+
collection_0[someEmailLiteral].usersProperty;
97+
collection_0[someEmailLiteral].gmailProperty;
98+
collection_0[someGmailLiteral].propertyForUnion;
99+
collection_0[someGmailLiteral].usersProperty;
100+
collection_0[someGmailLiteral].gmailProperty;
101+
if (Email.test(someEmail)) {
102+
collection_0[someEmail].propertyForUnion;
103+
collection_0[someEmail].usersProperty;
104+
collection_0[someEmail].gmailProperty;
105+
}
106+
if (EmailAndGmail.test(someGmail)) {
107+
collection_0[someGmail].propertyForUnion;
108+
collection_0[someGmail].usersProperty;
109+
collection_0[someGmail].gmailProperty;
110+
}
111+
112+
interface UsersCollectionWithError_2 {
113+
[gmail: EmailOrGmail]: GmailUser;
114+
[email: Email]: NonGmailUser;
115+
}
116+
interface UsersCollectionWithoutError_2 {
117+
[gmail: EmailOrGmail]: NonGmailUser | GmailUser;
118+
[email: Email]: NonGmailUser;
119+
}
120+
let collection_2: UsersCollectionWithoutError_2 = {};
121+
collection_0['[email protected]'].propertyForUnion;
122+
collection_0['[email protected]'].nonGmailProperty;
123+
collection_0['[email protected]'].gmailProperty;
124+
collection_0['[email protected]'].propertyForUnion;
125+
collection_0['[email protected]'].nonGmailProperty;
126+
collection_0['[email protected]'].gmailProperty;
127+
collection_0[someEmail].propertyForUnion;
128+
collection_0[someEmail].nonGmailProperty;
129+
collection_0[someEmail].gmailProperty;
130+
collection_0[someGmail].propertyForUnion;
131+
collection_0[someGmail].nonGmailProperty;
132+
collection_0[someGmail].gmailProperty;
133+
collection_0[<Email>someEmail].propertyForUnion;
134+
collection_0[<Email>someEmail].nonGmailProperty;
135+
collection_0[<Email>someEmail].gmailProperty;
136+
collection_0[<EmailOrGmail>someGmail].propertyForUnion;
137+
collection_0[<EmailOrGmail>someGmail].nonGmailProperty;
138+
collection_0[<EmailOrGmail>someGmail].gmailProperty;
139+
collection_0[someEmailLiteral].propertyForUnion;
140+
collection_0[someEmailLiteral].nonGmailProperty;
141+
collection_0[someEmailLiteral].gmailProperty;
142+
collection_0[someGmailLiteral].propertyForUnion;
143+
collection_0[someGmailLiteral].nonGmailProperty;
144+
collection_0[someGmailLiteral].gmailProperty;
145+
if (Email.test(someEmail)) {
146+
collection_0[someEmail].propertyForUnion;
147+
collection_0[someEmail].nonGmailProperty;
148+
collection_0[someEmail].gmailProperty;
149+
}
150+
if (EmailOrGmail.test(someGmail)) {
151+
collection_0[someGmail].propertyForUnion;
152+
collection_0[someGmail].nonGmailProperty;
153+
collection_0[someGmail].gmailProperty;
154+
}
155+
156+
interface UsersCollectionWithError_3 {
157+
[catchall: string]: User;
158+
[gmail: Gmail]: GmailUser;
159+
}
160+
interface UsersCollectionWithoutError_3 {
161+
[catchall: string]: User | GmailUser;
162+
[gmail: Gmail]: GmailUser;
163+
}
164+
let collection_3: UsersCollectionWithoutError_3 = {};
165+
collection_0['[email protected]'].propertyForUnion;
166+
collection_0['[email protected]'].usersProperty;
167+
collection_0['[email protected]'].gmailProperty;
168+
collection_0['[email protected]'].propertyForUnion;
169+
collection_0['[email protected]'].usersProperty;
170+
collection_0['[email protected]'].gmailProperty;
171+
collection_0[someEmail].propertyForUnion;
172+
collection_0[someEmail].usersProperty;
173+
collection_0[someEmail].gmailProperty;
174+
collection_0[someGmail].propertyForUnion;
175+
collection_0[someGmail].usersProperty;
176+
collection_0[someGmail].gmailProperty;
177+
collection_0[<Gmail>someGmail].propertyForUnion;
178+
collection_0[<Gmail>someGmail].usersProperty;
179+
collection_0[<Gmail>someGmail].gmailProperty;
180+
collection_0[someEmailLiteral].propertyForUnion;
181+
collection_0[someEmailLiteral].usersProperty;
182+
collection_0[someEmailLiteral].gmailProperty;
183+
collection_0[someGmailLiteral].propertyForUnion;
184+
collection_0[someGmailLiteral].usersProperty;
185+
collection_0[someGmailLiteral].gmailProperty;
186+
if (Gmail.test(someGmail)) {
187+
collection_0[someGmail].propertyForUnion;
188+
collection_0[someGmail].usersProperty;
189+
collection_0[someGmail].gmailProperty;
190+
}
191+
192+
interface UsersCollectionWithError_4 {
193+
[email: EmailOrFoo]: User;
194+
}

0 commit comments

Comments
 (0)