forked from microsoft/TypeScript
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathaugmentedTypesModules.js
258 lines (228 loc) · 5.3 KB
/
augmentedTypesModules.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
//// [augmentedTypesModules.ts]
// module then var
module m1 { }
var m1 = 1; // Should be allowed
module m1a { var y = 2; } // error
var m1a = 1; // error
module m1b { export var y = 2; } // error
var m1b = 1; // error
module m1c {
export interface I { foo(): void; }
}
var m1c = 1; // Should be allowed
module m1d { // error
export class I { foo() { } }
}
var m1d = 1; // error
// module then function
module m2 { }
function m2() { }; // ok since the module is not instantiated
module m2a { var y = 2; }
function m2a() { }; // error since the module is instantiated
module m2b { export var y = 2; }
function m2b() { }; // error since the module is instantiated
// should be errors to have function first
function m2c() { };
module m2c { export var y = 2; }
module m2d { }
declare function m2d(): void;
declare function m2e(): void;
module m2e { }
function m2f() { };
module m2f { export interface I { foo(): void } }
function m2g() { };
module m2g { export class C { foo() { } } }
// module then class
module m3 { }
class m3 { } // ok since the module is not instantiated
module m3a { var y = 2; }
class m3a { foo() { } } // error, class isn't ambient or declared before the module
class m3b { foo() { } }
module m3b { var y = 2; }
class m3c { foo() { } }
module m3c { export var y = 2; }
declare class m3d { foo(): void }
module m3d { export var y = 2; }
module m3e { export var y = 2; }
declare class m3e { foo(): void }
declare class m3f { foo(): void }
module m3f { export interface I { foo(): void } }
declare class m3g { foo(): void }
module m3g { export class C { foo() { } } }
// module then enum
// should be errors
module m4 { }
enum m4 { }
module m4a { var y = 2; }
enum m4a { One }
module m4b { export var y = 2; }
enum m4b { One }
module m4c { interface I { foo(): void } }
enum m4c { One }
module m4d { class C { foo() { } } }
enum m4d { One }
//// module then module
module m5 { export var y = 2; }
module m5 { export interface I { foo(): void } } // should already be reasonably well covered
// module then import
module m6 { export var y = 2; }
//import m6 = require('');
//// [augmentedTypesModules.js]
var m1 = 1; // Should be allowed
var m1a;
(function (m1a) {
var y = 2;
})(m1a || (m1a = {})); // error
var m1a = 1; // error
var m1b;
(function (m1b) {
m1b.y = 2;
})(m1b || (m1b = {})); // error
var m1b = 1; // error
var m1c = 1; // Should be allowed
var m1d;
(function (m1d) {// error
var I = (function () {
function I() {
}
I.prototype.foo = function () { };
return I;
}());
m1d.I = I;
})(m1d || (m1d = {}));
var m1d = 1; // error
function m2() { }
; // ok since the module is not instantiated
var m2a;
(function (m2a) {
var y = 2;
})(m2a || (m2a = {}));
function m2a() { }
; // error since the module is instantiated
var m2b;
(function (m2b) {
m2b.y = 2;
})(m2b || (m2b = {}));
function m2b() { }
; // error since the module is instantiated
// should be errors to have function first
function m2c() { }
;
var m2c;
(function (m2c) {
m2c.y = 2;
})(m2c || (m2c = {}));
function m2f() { }
;
function m2g() { }
;
var m2g;
(function (m2g) {
var C = (function () {
function C() {
}
C.prototype.foo = function () { };
return C;
}());
m2g.C = C;
})(m2g || (m2g = {}));
var m3 = (function () {
function m3() {
}
return m3;
}()); // ok since the module is not instantiated
var m3a;
(function (m3a) {
var y = 2;
})(m3a || (m3a = {}));
var m3a = (function () {
function m3a() {
}
m3a.prototype.foo = function () { };
return m3a;
}()); // error, class isn't ambient or declared before the module
var m3b = (function () {
function m3b() {
}
m3b.prototype.foo = function () { };
return m3b;
}());
var m3b;
(function (m3b) {
var y = 2;
})(m3b || (m3b = {}));
var m3c = (function () {
function m3c() {
}
m3c.prototype.foo = function () { };
return m3c;
}());
var m3c;
(function (m3c) {
m3c.y = 2;
})(m3c || (m3c = {}));
var m3d;
(function (m3d) {
m3d.y = 2;
})(m3d || (m3d = {}));
var m3e;
(function (m3e) {
m3e.y = 2;
})(m3e || (m3e = {}));
var m3g;
(function (m3g) {
var C = (function () {
function C() {
}
C.prototype.foo = function () { };
return C;
}());
m3g.C = C;
})(m3g || (m3g = {}));
var m4;
(function (m4) {
})(m4 || (m4 = {}));
var m4a;
(function (m4a) {
var y = 2;
})(m4a || (m4a = {}));
var m4a;
(function (m4a) {
m4a[m4a["One"] = 0] = "One";
})(m4a || (m4a = {}));
var m4b;
(function (m4b) {
m4b.y = 2;
})(m4b || (m4b = {}));
var m4b;
(function (m4b) {
m4b[m4b["One"] = 0] = "One";
})(m4b || (m4b = {}));
var m4c;
(function (m4c) {
m4c[m4c["One"] = 0] = "One";
})(m4c || (m4c = {}));
var m4d;
(function (m4d) {
var C = (function () {
function C() {
}
C.prototype.foo = function () { };
return C;
}());
})(m4d || (m4d = {}));
var m4d;
(function (m4d) {
m4d[m4d["One"] = 0] = "One";
})(m4d || (m4d = {}));
//// module then module
var m5;
(function (m5) {
m5.y = 2;
})(m5 || (m5 = {}));
// module then import
var m6;
(function (m6) {
m6.y = 2;
})(m6 || (m6 = {}));
//import m6 = require('');