Skip to content

Commit b977b8c

Browse files
committed
Respond to code review comments
1 parent 02ccd91 commit b977b8c

File tree

6 files changed

+123
-55
lines changed

6 files changed

+123
-55
lines changed

src/compiler/binder.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2254,10 +2254,7 @@ namespace ts {
22542254
// this.foo assignment in a JavaScript class
22552255
// Bind this property to the containing class
22562256
const containingClass = container.parent;
2257-
const symbol = hasModifier(container, ModifierFlags.Static)
2258-
? declareSymbol(containingClass.symbol.exports, containingClass.symbol, node, SymbolFlags.Property, SymbolFlags.None)
2259-
: declareSymbol(containingClass.symbol.members, containingClass.symbol, node, SymbolFlags.Property, SymbolFlags.None);
2260-
2257+
const symbol = declareSymbol(hasModifier(container, ModifierFlags.Static) ? containingClass.symbol.exports : containingClass.symbol.members, containingClass.symbol, node, SymbolFlags.Property, SymbolFlags.None);
22612258
if (symbol) {
22622259
// symbols declared through 'this' property assignements can be overwritten by subsequent method declarations
22632260
(symbol as Symbol).isReplaceableByMethod = true;

src/compiler/checker.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3472,7 +3472,7 @@ namespace ts {
34723472
return undefined;
34733473
}
34743474

3475-
function getWidendedTypeFromJSSpecialPropetyDeclarations(symbol: Symbol) {
3475+
function getWidenedTypeFromJSSpecialPropetyDeclarations(symbol: Symbol) {
34763476
const types: Type[] = [];
34773477
let definedInConstructor = false;
34783478
let definedInMethod = false;
@@ -3663,7 +3663,7 @@ namespace ts {
36633663
// * className.prototype.method = expr
36643664
if (declaration.kind === SyntaxKind.BinaryExpression ||
36653665
declaration.kind === SyntaxKind.PropertyAccessExpression && declaration.parent.kind === SyntaxKind.BinaryExpression) {
3666-
type = getWidendedTypeFromJSSpecialPropetyDeclarations(symbol);
3666+
type = getWidenedTypeFromJSSpecialPropetyDeclarations(symbol);
36673667
}
36683668
else {
36693669
type = getWidenedTypeForVariableLikeDeclaration(<VariableLikeDeclaration>declaration, /*reportErrors*/ true);

tests/baselines/reference/inferringClassMembersFromAssignments.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ class C {
1010
else {
1111
this.inConstructor = "string"
1212
}
13+
this.inMultiple = 0;
1314
}
1415
method() {
1516
if (Math.random()) {
@@ -18,6 +19,7 @@ class C {
1819
else {
1920
this.inMethod = "string"
2021
}
22+
this.inMultiple = "string";
2123
}
2224
get() {
2325
if (Math.random()) {
@@ -26,6 +28,7 @@ class C {
2628
else {
2729
this.inGetter = "string"
2830
}
31+
this.inMultiple = false;
2932
}
3033
set() {
3134
if (Math.random()) {
@@ -73,6 +76,11 @@ var stringOrNumberOrUndefined = c.inMethod;
7376
var stringOrNumberOrUndefined = c.inGetter;
7477
var stringOrNumberOrUndefined = c.inSetter;
7578

79+
var stringOrNumberOrBoolean: string | number | boolean;
80+
81+
var stringOrNumberOrBoolean = c.inMultiple;
82+
83+
7684
var stringOrNumberOrUndefined = C.inStaticMethod;
7785
var stringOrNumberOrUndefined = C.inStaticGetter;
7886
var stringOrNumberOrUndefined = C.inStaticSetter;
@@ -87,6 +95,7 @@ var C = (function () {
8795
else {
8896
this.inConstructor = "string";
8997
}
98+
this.inMultiple = 0;
9099
}
91100
C.prototype.method = function () {
92101
if (Math.random()) {
@@ -95,6 +104,7 @@ var C = (function () {
95104
else {
96105
this.inMethod = "string";
97106
}
107+
this.inMultiple = "string";
98108
};
99109
C.prototype.get = function () {
100110
if (Math.random()) {
@@ -103,6 +113,7 @@ var C = (function () {
103113
else {
104114
this.inGetter = "string";
105115
}
116+
this.inMultiple = false;
106117
};
107118
C.prototype.set = function () {
108119
if (Math.random()) {
@@ -145,6 +156,8 @@ var stringOrNumberOrUndefined;
145156
var stringOrNumberOrUndefined = c.inMethod;
146157
var stringOrNumberOrUndefined = c.inGetter;
147158
var stringOrNumberOrUndefined = c.inSetter;
159+
var stringOrNumberOrBoolean;
160+
var stringOrNumberOrBoolean = c.inMultiple;
148161
var stringOrNumberOrUndefined = C.inStaticMethod;
149162
var stringOrNumberOrUndefined = C.inStaticGetter;
150163
var stringOrNumberOrUndefined = C.inStaticSetter;

tests/baselines/reference/inferringClassMembersFromAssignments.symbols

Lines changed: 71 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -20,125 +20,137 @@ class C {
2020
>this : Symbol(C, Decl(a.js, 0, 0))
2121
>inConstructor : Symbol(C.inConstructor, Decl(a.js, 3, 28), Decl(a.js, 6, 14))
2222
}
23+
this.inMultiple = 0;
24+
>this.inMultiple : Symbol(C.inMultiple, Decl(a.js, 8, 9), Decl(a.js, 17, 9), Decl(a.js, 26, 9))
25+
>this : Symbol(C, Decl(a.js, 0, 0))
26+
>inMultiple : Symbol(C.inMultiple, Decl(a.js, 8, 9), Decl(a.js, 17, 9), Decl(a.js, 26, 9))
2327
}
2428
method() {
25-
>method : Symbol(C.method, Decl(a.js, 9, 5))
29+
>method : Symbol(C.method, Decl(a.js, 10, 5))
2630

2731
if (Math.random()) {
2832
>Math.random : Symbol(Math.random, Decl(lib.d.ts, --, --))
2933
>Math : Symbol(Math, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --))
3034
>random : Symbol(Math.random, Decl(lib.d.ts, --, --))
3135

3236
this.inMethod = 0;
33-
>this.inMethod : Symbol(C.inMethod, Decl(a.js, 11, 28), Decl(a.js, 14, 14))
37+
>this.inMethod : Symbol(C.inMethod, Decl(a.js, 12, 28), Decl(a.js, 15, 14))
3438
>this : Symbol(C, Decl(a.js, 0, 0))
35-
>inMethod : Symbol(C.inMethod, Decl(a.js, 11, 28), Decl(a.js, 14, 14))
39+
>inMethod : Symbol(C.inMethod, Decl(a.js, 12, 28), Decl(a.js, 15, 14))
3640
}
3741
else {
3842
this.inMethod = "string"
39-
>this.inMethod : Symbol(C.inMethod, Decl(a.js, 11, 28), Decl(a.js, 14, 14))
43+
>this.inMethod : Symbol(C.inMethod, Decl(a.js, 12, 28), Decl(a.js, 15, 14))
4044
>this : Symbol(C, Decl(a.js, 0, 0))
41-
>inMethod : Symbol(C.inMethod, Decl(a.js, 11, 28), Decl(a.js, 14, 14))
45+
>inMethod : Symbol(C.inMethod, Decl(a.js, 12, 28), Decl(a.js, 15, 14))
4246
}
47+
this.inMultiple = "string";
48+
>this.inMultiple : Symbol(C.inMultiple, Decl(a.js, 8, 9), Decl(a.js, 17, 9), Decl(a.js, 26, 9))
49+
>this : Symbol(C, Decl(a.js, 0, 0))
50+
>inMultiple : Symbol(C.inMultiple, Decl(a.js, 8, 9), Decl(a.js, 17, 9), Decl(a.js, 26, 9))
4351
}
4452
get() {
45-
>get : Symbol(C.get, Decl(a.js, 17, 5))
53+
>get : Symbol(C.get, Decl(a.js, 19, 5))
4654

4755
if (Math.random()) {
4856
>Math.random : Symbol(Math.random, Decl(lib.d.ts, --, --))
4957
>Math : Symbol(Math, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --))
5058
>random : Symbol(Math.random, Decl(lib.d.ts, --, --))
5159

5260
this.inGetter = 0;
53-
>this.inGetter : Symbol(C.inGetter, Decl(a.js, 19, 28), Decl(a.js, 22, 14))
61+
>this.inGetter : Symbol(C.inGetter, Decl(a.js, 21, 28), Decl(a.js, 24, 14))
5462
>this : Symbol(C, Decl(a.js, 0, 0))
55-
>inGetter : Symbol(C.inGetter, Decl(a.js, 19, 28), Decl(a.js, 22, 14))
63+
>inGetter : Symbol(C.inGetter, Decl(a.js, 21, 28), Decl(a.js, 24, 14))
5664
}
5765
else {
5866
this.inGetter = "string"
59-
>this.inGetter : Symbol(C.inGetter, Decl(a.js, 19, 28), Decl(a.js, 22, 14))
67+
>this.inGetter : Symbol(C.inGetter, Decl(a.js, 21, 28), Decl(a.js, 24, 14))
6068
>this : Symbol(C, Decl(a.js, 0, 0))
61-
>inGetter : Symbol(C.inGetter, Decl(a.js, 19, 28), Decl(a.js, 22, 14))
69+
>inGetter : Symbol(C.inGetter, Decl(a.js, 21, 28), Decl(a.js, 24, 14))
6270
}
71+
this.inMultiple = false;
72+
>this.inMultiple : Symbol(C.inMultiple, Decl(a.js, 8, 9), Decl(a.js, 17, 9), Decl(a.js, 26, 9))
73+
>this : Symbol(C, Decl(a.js, 0, 0))
74+
>inMultiple : Symbol(C.inMultiple, Decl(a.js, 8, 9), Decl(a.js, 17, 9), Decl(a.js, 26, 9))
6375
}
6476
set() {
65-
>set : Symbol(C.set, Decl(a.js, 25, 5))
77+
>set : Symbol(C.set, Decl(a.js, 28, 5))
6678

6779
if (Math.random()) {
6880
>Math.random : Symbol(Math.random, Decl(lib.d.ts, --, --))
6981
>Math : Symbol(Math, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --))
7082
>random : Symbol(Math.random, Decl(lib.d.ts, --, --))
7183

7284
this.inSetter = 0;
73-
>this.inSetter : Symbol(C.inSetter, Decl(a.js, 27, 28), Decl(a.js, 30, 14))
85+
>this.inSetter : Symbol(C.inSetter, Decl(a.js, 30, 28), Decl(a.js, 33, 14))
7486
>this : Symbol(C, Decl(a.js, 0, 0))
75-
>inSetter : Symbol(C.inSetter, Decl(a.js, 27, 28), Decl(a.js, 30, 14))
87+
>inSetter : Symbol(C.inSetter, Decl(a.js, 30, 28), Decl(a.js, 33, 14))
7688
}
7789
else {
7890
this.inSetter = "string"
79-
>this.inSetter : Symbol(C.inSetter, Decl(a.js, 27, 28), Decl(a.js, 30, 14))
91+
>this.inSetter : Symbol(C.inSetter, Decl(a.js, 30, 28), Decl(a.js, 33, 14))
8092
>this : Symbol(C, Decl(a.js, 0, 0))
81-
>inSetter : Symbol(C.inSetter, Decl(a.js, 27, 28), Decl(a.js, 30, 14))
93+
>inSetter : Symbol(C.inSetter, Decl(a.js, 30, 28), Decl(a.js, 33, 14))
8294
}
8395
}
8496
static method() {
85-
>method : Symbol(C.method, Decl(a.js, 33, 5))
97+
>method : Symbol(C.method, Decl(a.js, 36, 5))
8698

8799
if (Math.random()) {
88100
>Math.random : Symbol(Math.random, Decl(lib.d.ts, --, --))
89101
>Math : Symbol(Math, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --))
90102
>random : Symbol(Math.random, Decl(lib.d.ts, --, --))
91103

92104
this.inStaticMethod = 0;
93-
>this.inStaticMethod : Symbol(C.inStaticMethod, Decl(a.js, 35, 28), Decl(a.js, 38, 14))
105+
>this.inStaticMethod : Symbol(C.inStaticMethod, Decl(a.js, 38, 28), Decl(a.js, 41, 14))
94106
>this : Symbol(C, Decl(a.js, 0, 0))
95-
>inStaticMethod : Symbol(C.inStaticMethod, Decl(a.js, 35, 28), Decl(a.js, 38, 14))
107+
>inStaticMethod : Symbol(C.inStaticMethod, Decl(a.js, 38, 28), Decl(a.js, 41, 14))
96108
}
97109
else {
98110
this.inStaticMethod = "string"
99-
>this.inStaticMethod : Symbol(C.inStaticMethod, Decl(a.js, 35, 28), Decl(a.js, 38, 14))
111+
>this.inStaticMethod : Symbol(C.inStaticMethod, Decl(a.js, 38, 28), Decl(a.js, 41, 14))
100112
>this : Symbol(C, Decl(a.js, 0, 0))
101-
>inStaticMethod : Symbol(C.inStaticMethod, Decl(a.js, 35, 28), Decl(a.js, 38, 14))
113+
>inStaticMethod : Symbol(C.inStaticMethod, Decl(a.js, 38, 28), Decl(a.js, 41, 14))
102114
}
103115
}
104116
static get() {
105-
>get : Symbol(C.get, Decl(a.js, 41, 5))
117+
>get : Symbol(C.get, Decl(a.js, 44, 5))
106118

107119
if (Math.random()) {
108120
>Math.random : Symbol(Math.random, Decl(lib.d.ts, --, --))
109121
>Math : Symbol(Math, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --))
110122
>random : Symbol(Math.random, Decl(lib.d.ts, --, --))
111123

112124
this.inStaticGetter = 0;
113-
>this.inStaticGetter : Symbol(C.inStaticGetter, Decl(a.js, 43, 28), Decl(a.js, 46, 14))
125+
>this.inStaticGetter : Symbol(C.inStaticGetter, Decl(a.js, 46, 28), Decl(a.js, 49, 14))
114126
>this : Symbol(C, Decl(a.js, 0, 0))
115-
>inStaticGetter : Symbol(C.inStaticGetter, Decl(a.js, 43, 28), Decl(a.js, 46, 14))
127+
>inStaticGetter : Symbol(C.inStaticGetter, Decl(a.js, 46, 28), Decl(a.js, 49, 14))
116128
}
117129
else {
118130
this.inStaticGetter = "string"
119-
>this.inStaticGetter : Symbol(C.inStaticGetter, Decl(a.js, 43, 28), Decl(a.js, 46, 14))
131+
>this.inStaticGetter : Symbol(C.inStaticGetter, Decl(a.js, 46, 28), Decl(a.js, 49, 14))
120132
>this : Symbol(C, Decl(a.js, 0, 0))
121-
>inStaticGetter : Symbol(C.inStaticGetter, Decl(a.js, 43, 28), Decl(a.js, 46, 14))
133+
>inStaticGetter : Symbol(C.inStaticGetter, Decl(a.js, 46, 28), Decl(a.js, 49, 14))
122134
}
123135
}
124136
static set() {
125-
>set : Symbol(C.set, Decl(a.js, 49, 5))
137+
>set : Symbol(C.set, Decl(a.js, 52, 5))
126138

127139
if (Math.random()) {
128140
>Math.random : Symbol(Math.random, Decl(lib.d.ts, --, --))
129141
>Math : Symbol(Math, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --))
130142
>random : Symbol(Math.random, Decl(lib.d.ts, --, --))
131143

132144
this.inStaticSetter = 0;
133-
>this.inStaticSetter : Symbol(C.inStaticSetter, Decl(a.js, 51, 28), Decl(a.js, 54, 14))
145+
>this.inStaticSetter : Symbol(C.inStaticSetter, Decl(a.js, 54, 28), Decl(a.js, 57, 14))
134146
>this : Symbol(C, Decl(a.js, 0, 0))
135-
>inStaticSetter : Symbol(C.inStaticSetter, Decl(a.js, 51, 28), Decl(a.js, 54, 14))
147+
>inStaticSetter : Symbol(C.inStaticSetter, Decl(a.js, 54, 28), Decl(a.js, 57, 14))
136148
}
137149
else {
138150
this.inStaticSetter = "string"
139-
>this.inStaticSetter : Symbol(C.inStaticSetter, Decl(a.js, 51, 28), Decl(a.js, 54, 14))
151+
>this.inStaticSetter : Symbol(C.inStaticSetter, Decl(a.js, 54, 28), Decl(a.js, 57, 14))
140152
>this : Symbol(C, Decl(a.js, 0, 0))
141-
>inStaticSetter : Symbol(C.inStaticSetter, Decl(a.js, 51, 28), Decl(a.js, 54, 14))
153+
>inStaticSetter : Symbol(C.inStaticSetter, Decl(a.js, 54, 28), Decl(a.js, 57, 14))
142154
}
143155
}
144156
}
@@ -158,41 +170,51 @@ var stringOrNumber = c.inConstructor;
158170
>inConstructor : Symbol(C.inConstructor, Decl(a.js, 3, 28), Decl(a.js, 6, 14))
159171

160172
var stringOrNumberOrUndefined: string | number | undefined;
161-
>stringOrNumberOrUndefined : Symbol(stringOrNumberOrUndefined, Decl(b.ts, 5, 3), Decl(b.ts, 7, 3), Decl(b.ts, 8, 3), Decl(b.ts, 9, 3), Decl(b.ts, 11, 3), Decl(b.ts, 12, 3), Decl(b.ts, 13, 3))
173+
>stringOrNumberOrUndefined : Symbol(stringOrNumberOrUndefined, Decl(b.ts, 5, 3), Decl(b.ts, 7, 3), Decl(b.ts, 8, 3), Decl(b.ts, 9, 3), Decl(b.ts, 16, 3), Decl(b.ts, 17, 3), Decl(b.ts, 18, 3))
162174

163175
var stringOrNumberOrUndefined = c.inMethod;
164-
>stringOrNumberOrUndefined : Symbol(stringOrNumberOrUndefined, Decl(b.ts, 5, 3), Decl(b.ts, 7, 3), Decl(b.ts, 8, 3), Decl(b.ts, 9, 3), Decl(b.ts, 11, 3), Decl(b.ts, 12, 3), Decl(b.ts, 13, 3))
165-
>c.inMethod : Symbol(C.inMethod, Decl(a.js, 11, 28), Decl(a.js, 14, 14))
176+
>stringOrNumberOrUndefined : Symbol(stringOrNumberOrUndefined, Decl(b.ts, 5, 3), Decl(b.ts, 7, 3), Decl(b.ts, 8, 3), Decl(b.ts, 9, 3), Decl(b.ts, 16, 3), Decl(b.ts, 17, 3), Decl(b.ts, 18, 3))
177+
>c.inMethod : Symbol(C.inMethod, Decl(a.js, 12, 28), Decl(a.js, 15, 14))
166178
>c : Symbol(c, Decl(b.ts, 0, 3))
167-
>inMethod : Symbol(C.inMethod, Decl(a.js, 11, 28), Decl(a.js, 14, 14))
179+
>inMethod : Symbol(C.inMethod, Decl(a.js, 12, 28), Decl(a.js, 15, 14))
168180

169181
var stringOrNumberOrUndefined = c.inGetter;
170-
>stringOrNumberOrUndefined : Symbol(stringOrNumberOrUndefined, Decl(b.ts, 5, 3), Decl(b.ts, 7, 3), Decl(b.ts, 8, 3), Decl(b.ts, 9, 3), Decl(b.ts, 11, 3), Decl(b.ts, 12, 3), Decl(b.ts, 13, 3))
171-
>c.inGetter : Symbol(C.inGetter, Decl(a.js, 19, 28), Decl(a.js, 22, 14))
182+
>stringOrNumberOrUndefined : Symbol(stringOrNumberOrUndefined, Decl(b.ts, 5, 3), Decl(b.ts, 7, 3), Decl(b.ts, 8, 3), Decl(b.ts, 9, 3), Decl(b.ts, 16, 3), Decl(b.ts, 17, 3), Decl(b.ts, 18, 3))
183+
>c.inGetter : Symbol(C.inGetter, Decl(a.js, 21, 28), Decl(a.js, 24, 14))
172184
>c : Symbol(c, Decl(b.ts, 0, 3))
173-
>inGetter : Symbol(C.inGetter, Decl(a.js, 19, 28), Decl(a.js, 22, 14))
185+
>inGetter : Symbol(C.inGetter, Decl(a.js, 21, 28), Decl(a.js, 24, 14))
174186

175187
var stringOrNumberOrUndefined = c.inSetter;
176-
>stringOrNumberOrUndefined : Symbol(stringOrNumberOrUndefined, Decl(b.ts, 5, 3), Decl(b.ts, 7, 3), Decl(b.ts, 8, 3), Decl(b.ts, 9, 3), Decl(b.ts, 11, 3), Decl(b.ts, 12, 3), Decl(b.ts, 13, 3))
177-
>c.inSetter : Symbol(C.inSetter, Decl(a.js, 27, 28), Decl(a.js, 30, 14))
188+
>stringOrNumberOrUndefined : Symbol(stringOrNumberOrUndefined, Decl(b.ts, 5, 3), Decl(b.ts, 7, 3), Decl(b.ts, 8, 3), Decl(b.ts, 9, 3), Decl(b.ts, 16, 3), Decl(b.ts, 17, 3), Decl(b.ts, 18, 3))
189+
>c.inSetter : Symbol(C.inSetter, Decl(a.js, 30, 28), Decl(a.js, 33, 14))
178190
>c : Symbol(c, Decl(b.ts, 0, 3))
179-
>inSetter : Symbol(C.inSetter, Decl(a.js, 27, 28), Decl(a.js, 30, 14))
191+
>inSetter : Symbol(C.inSetter, Decl(a.js, 30, 28), Decl(a.js, 33, 14))
192+
193+
var stringOrNumberOrBoolean: string | number | boolean;
194+
>stringOrNumberOrBoolean : Symbol(stringOrNumberOrBoolean, Decl(b.ts, 11, 3), Decl(b.ts, 13, 3))
195+
196+
var stringOrNumberOrBoolean = c.inMultiple;
197+
>stringOrNumberOrBoolean : Symbol(stringOrNumberOrBoolean, Decl(b.ts, 11, 3), Decl(b.ts, 13, 3))
198+
>c.inMultiple : Symbol(C.inMultiple, Decl(a.js, 8, 9), Decl(a.js, 17, 9), Decl(a.js, 26, 9))
199+
>c : Symbol(c, Decl(b.ts, 0, 3))
200+
>inMultiple : Symbol(C.inMultiple, Decl(a.js, 8, 9), Decl(a.js, 17, 9), Decl(a.js, 26, 9))
201+
180202

181203
var stringOrNumberOrUndefined = C.inStaticMethod;
182-
>stringOrNumberOrUndefined : Symbol(stringOrNumberOrUndefined, Decl(b.ts, 5, 3), Decl(b.ts, 7, 3), Decl(b.ts, 8, 3), Decl(b.ts, 9, 3), Decl(b.ts, 11, 3), Decl(b.ts, 12, 3), Decl(b.ts, 13, 3))
183-
>C.inStaticMethod : Symbol(C.inStaticMethod, Decl(a.js, 35, 28), Decl(a.js, 38, 14))
204+
>stringOrNumberOrUndefined : Symbol(stringOrNumberOrUndefined, Decl(b.ts, 5, 3), Decl(b.ts, 7, 3), Decl(b.ts, 8, 3), Decl(b.ts, 9, 3), Decl(b.ts, 16, 3), Decl(b.ts, 17, 3), Decl(b.ts, 18, 3))
205+
>C.inStaticMethod : Symbol(C.inStaticMethod, Decl(a.js, 38, 28), Decl(a.js, 41, 14))
184206
>C : Symbol(C, Decl(a.js, 0, 0))
185-
>inStaticMethod : Symbol(C.inStaticMethod, Decl(a.js, 35, 28), Decl(a.js, 38, 14))
207+
>inStaticMethod : Symbol(C.inStaticMethod, Decl(a.js, 38, 28), Decl(a.js, 41, 14))
186208

187209
var stringOrNumberOrUndefined = C.inStaticGetter;
188-
>stringOrNumberOrUndefined : Symbol(stringOrNumberOrUndefined, Decl(b.ts, 5, 3), Decl(b.ts, 7, 3), Decl(b.ts, 8, 3), Decl(b.ts, 9, 3), Decl(b.ts, 11, 3), Decl(b.ts, 12, 3), Decl(b.ts, 13, 3))
189-
>C.inStaticGetter : Symbol(C.inStaticGetter, Decl(a.js, 43, 28), Decl(a.js, 46, 14))
210+
>stringOrNumberOrUndefined : Symbol(stringOrNumberOrUndefined, Decl(b.ts, 5, 3), Decl(b.ts, 7, 3), Decl(b.ts, 8, 3), Decl(b.ts, 9, 3), Decl(b.ts, 16, 3), Decl(b.ts, 17, 3), Decl(b.ts, 18, 3))
211+
>C.inStaticGetter : Symbol(C.inStaticGetter, Decl(a.js, 46, 28), Decl(a.js, 49, 14))
190212
>C : Symbol(C, Decl(a.js, 0, 0))
191-
>inStaticGetter : Symbol(C.inStaticGetter, Decl(a.js, 43, 28), Decl(a.js, 46, 14))
213+
>inStaticGetter : Symbol(C.inStaticGetter, Decl(a.js, 46, 28), Decl(a.js, 49, 14))
192214

193215
var stringOrNumberOrUndefined = C.inStaticSetter;
194-
>stringOrNumberOrUndefined : Symbol(stringOrNumberOrUndefined, Decl(b.ts, 5, 3), Decl(b.ts, 7, 3), Decl(b.ts, 8, 3), Decl(b.ts, 9, 3), Decl(b.ts, 11, 3), Decl(b.ts, 12, 3), Decl(b.ts, 13, 3))
195-
>C.inStaticSetter : Symbol(C.inStaticSetter, Decl(a.js, 51, 28), Decl(a.js, 54, 14))
216+
>stringOrNumberOrUndefined : Symbol(stringOrNumberOrUndefined, Decl(b.ts, 5, 3), Decl(b.ts, 7, 3), Decl(b.ts, 8, 3), Decl(b.ts, 9, 3), Decl(b.ts, 16, 3), Decl(b.ts, 17, 3), Decl(b.ts, 18, 3))
217+
>C.inStaticSetter : Symbol(C.inStaticSetter, Decl(a.js, 54, 28), Decl(a.js, 57, 14))
196218
>C : Symbol(C, Decl(a.js, 0, 0))
197-
>inStaticSetter : Symbol(C.inStaticSetter, Decl(a.js, 51, 28), Decl(a.js, 54, 14))
219+
>inStaticSetter : Symbol(C.inStaticSetter, Decl(a.js, 54, 28), Decl(a.js, 57, 14))
198220

tests/baselines/reference/inferringClassMembersFromAssignments.types

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,12 @@ class C {
2525
>inConstructor : string | number
2626
>"string" : "string"
2727
}
28+
this.inMultiple = 0;
29+
>this.inMultiple = 0 : 0
30+
>this.inMultiple : string | number | boolean
31+
>this : this
32+
>inMultiple : string | number | boolean
33+
>0 : 0
2834
}
2935
method() {
3036
>method : () => void
@@ -50,6 +56,12 @@ class C {
5056
>inMethod : string | number | undefined
5157
>"string" : "string"
5258
}
59+
this.inMultiple = "string";
60+
>this.inMultiple = "string" : "string"
61+
>this.inMultiple : string | number | boolean
62+
>this : this
63+
>inMultiple : string | number | boolean
64+
>"string" : "string"
5365
}
5466
get() {
5567
>get : () => void
@@ -75,6 +87,12 @@ class C {
7587
>inGetter : string | number | undefined
7688
>"string" : "string"
7789
}
90+
this.inMultiple = false;
91+
>this.inMultiple = false : false
92+
>this.inMultiple : string | number | boolean
93+
>this : this
94+
>inMultiple : string | number | boolean
95+
>false : false
7896
}
7997
set() {
8098
>set : () => void
@@ -214,6 +232,16 @@ var stringOrNumberOrUndefined = c.inSetter;
214232
>c : C
215233
>inSetter : string | number | undefined
216234

235+
var stringOrNumberOrBoolean: string | number | boolean;
236+
>stringOrNumberOrBoolean : string | number | boolean
237+
238+
var stringOrNumberOrBoolean = c.inMultiple;
239+
>stringOrNumberOrBoolean : string | number | boolean
240+
>c.inMultiple : string | number | boolean
241+
>c : C
242+
>inMultiple : string | number | boolean
243+
244+
217245
var stringOrNumberOrUndefined = C.inStaticMethod;
218246
>stringOrNumberOrUndefined : string | number | undefined
219247
>C.inStaticMethod : string | number | undefined

0 commit comments

Comments
 (0)