Skip to content

Commit d3f9601

Browse files
authored
Fix namespace expando merge (#26690)
* Allow JSContainers to merge with namespaces Expando functions marked with JSContainer previously failed to merge with namespaces. This change adds JSContainer to ValueModuleExcludes, allowing this kind of merge. * Improve symbol flags to fix namespace/expando merging Calls to bindPropertyAssignment now provide which special assignment kind they originated from. This allows better symbol flags to be set: 1. Property assignments get the FunctionScopedVariable flag, since they are equivalent to a `namespace` exporting a `var`. 2. Prototype property assignments get the Method flag if the initialiser is functionlike, and Property otherwise. 3. Prototype assignments get the flag Property. (3) is still not entirely correct (it's missing the Prototype flag), but is what existed previously. I'll try adding the Prototype flag to see whether it changes any baselines. * Add cross-file merge test * Update missed baselines * Namespace declarations are primary for merging purposes Also, property-assignments go back to being property declarations, not function-scoped variable declarations * Revert unneeded changes * Revert unneeded changes (in a codefix this time) * Put JSContainer on all assignment declarations This allows most of the new special-case merge code to go away. It now uses the JSContainer special-case code, which already exists. * Missed comment * Fix extra newline lint
1 parent 828279b commit d3f9601

22 files changed

+1242
-15
lines changed

src/compiler/binder.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -236,8 +236,9 @@ namespace ts {
236236
if (symbolFlags & SymbolFlags.Value) {
237237
const { valueDeclaration } = symbol;
238238
if (!valueDeclaration ||
239+
(isAssignmentDeclaration(valueDeclaration) && !isAssignmentDeclaration(node)) ||
239240
(valueDeclaration.kind !== node.kind && isEffectiveModuleDeclaration(valueDeclaration))) {
240-
// other kinds of value declarations take precedence over modules
241+
// other kinds of value declarations take precedence over modules and assignment declarations
241242
symbol.valueDeclaration = node;
242243
}
243244
}
@@ -373,7 +374,8 @@ namespace ts {
373374
// prototype symbols like methods.
374375
symbolTable.set(name, symbol = createSymbol(SymbolFlags.None, name));
375376
}
376-
else {
377+
else if (!(includes & SymbolFlags.Variable && symbol.flags & SymbolFlags.JSContainer)) {
378+
// JSContainers are allowed to merge with variables, no matter what other flags they have.
377379
if (isNamedDeclaration(node)) {
378380
node.name.parent = node;
379381
}
@@ -2537,12 +2539,10 @@ namespace ts {
25372539
(namespaceSymbol.members || (namespaceSymbol.members = createSymbolTable())) :
25382540
(namespaceSymbol.exports || (namespaceSymbol.exports = createSymbolTable()));
25392541

2540-
// Declare the method/property
2541-
const jsContainerFlag = isToplevelNamespaceableInitializer ? SymbolFlags.JSContainer : 0;
25422542
const isMethod = isFunctionLikeDeclaration(getAssignedJavascriptInitializer(propertyAccess)!);
2543-
const symbolFlags = (isMethod ? SymbolFlags.Method : SymbolFlags.Property) | jsContainerFlag;
2544-
const symbolExcludes = (isMethod ? SymbolFlags.MethodExcludes : SymbolFlags.PropertyExcludes) & ~jsContainerFlag;
2545-
declareSymbol(symbolTable, namespaceSymbol, propertyAccess, symbolFlags, symbolExcludes);
2543+
const includes = isMethod ? SymbolFlags.Method : SymbolFlags.Property;
2544+
const excludes = isMethod ? SymbolFlags.MethodExcludes : SymbolFlags.PropertyExcludes;
2545+
declareSymbol(symbolTable, namespaceSymbol, propertyAccess, includes | SymbolFlags.JSContainer, excludes & ~SymbolFlags.JSContainer);
25462546
}
25472547

25482548
/**

src/compiler/checker.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -837,8 +837,9 @@ namespace ts {
837837
target.flags |= source.flags;
838838
if (source.valueDeclaration &&
839839
(!target.valueDeclaration ||
840+
isAssignmentDeclaration(target.valueDeclaration) ||
840841
isEffectiveModuleDeclaration(target.valueDeclaration) && !isEffectiveModuleDeclaration(source.valueDeclaration))) {
841-
// other kinds of value declarations take precedence over modules
842+
// other kinds of value declarations take precedence over modules and assignment declarations
842843
target.valueDeclaration = source.valueDeclaration;
843844
}
844845
addRange(target.declarations, source.declarations);

src/compiler/types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3463,7 +3463,7 @@ namespace ts {
34633463
InterfaceExcludes = Type & ~(Interface | Class),
34643464
RegularEnumExcludes = (Value | Type) & ~(RegularEnum | ValueModule), // regular enums merge only with regular enums and modules
34653465
ConstEnumExcludes = (Value | Type) & ~ConstEnum, // const enums merge only with const enums
3466-
ValueModuleExcludes = Value & ~(Function | Class | RegularEnum | ValueModule),
3466+
ValueModuleExcludes = Value & ~(Function | Class | RegularEnum | ValueModule | JSContainer),
34673467
NamespaceModuleExcludes = 0,
34683468
MethodExcludes = Value & ~Method,
34693469
GetAccessorExcludes = Value & ~SetAccessor,

src/compiler/utilities.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1762,6 +1762,10 @@ namespace ts {
17621762
return decl;
17631763
}
17641764

1765+
export function isAssignmentDeclaration(decl: Declaration) {
1766+
return isBinaryExpression(decl) || isPropertyAccessExpression(decl) || isIdentifier(decl);
1767+
}
1768+
17651769
/** Get the initializer, taking into account defaulted Javascript initializers */
17661770
export function getEffectiveInitializer(node: HasExpressionInitializer) {
17671771
if (isInJavaScriptFile(node) && node.initializer &&

tests/baselines/reference/api/tsserverlibrary.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2075,7 +2075,7 @@ declare namespace ts {
20752075
InterfaceExcludes = 67897736,
20762076
RegularEnumExcludes = 68008191,
20772077
ConstEnumExcludes = 68008831,
2078-
ValueModuleExcludes = 67219599,
2078+
ValueModuleExcludes = 110735,
20792079
NamespaceModuleExcludes = 0,
20802080
MethodExcludes = 67212223,
20812081
GetAccessorExcludes = 67154879,

tests/baselines/reference/api/typescript.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2075,7 +2075,7 @@ declare namespace ts {
20752075
InterfaceExcludes = 67897736,
20762076
RegularEnumExcludes = 68008191,
20772077
ConstEnumExcludes = 68008831,
2078-
ValueModuleExcludes = 67219599,
2078+
ValueModuleExcludes = 110735,
20792079
NamespaceModuleExcludes = 0,
20802080
MethodExcludes = 67212223,
20812081
GetAccessorExcludes = 67154879,

tests/baselines/reference/jsContainerMergeJsContainer.types

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,18 @@ const a = {};
66

77
a.d = function() {};
88
>a.d = function() {} : { (): void; prototype: {}; }
9-
>a.d : { (): void; prototype: {}; }
9+
>a.d : typeof a.d
1010
>a : typeof a
11-
>d : { (): void; prototype: {}; }
11+
>d : typeof a.d
1212
>function() {} : { (): void; prototype: {}; }
1313

1414
=== tests/cases/conformance/salsa/b.js ===
1515
a.d.prototype = {};
1616
>a.d.prototype = {} : {}
1717
>a.d.prototype : {}
18-
>a.d : { (): void; prototype: {}; }
18+
>a.d : typeof a.d
1919
>a : typeof a
20-
>d : { (): void; prototype: {}; }
20+
>d : typeof a.d
2121
>prototype : {}
2222
>{} : {}
2323

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
tests/cases/conformance/salsa/typeFromPropertyAssignment31.ts(13,1): error TS2322: Type 'false' is not assignable to type 'number'.
2+
tests/cases/conformance/salsa/typeFromPropertyAssignment31.ts(25,1): error TS2322: Type 'false' is not assignable to type 'number'.
3+
4+
5+
==== tests/cases/conformance/salsa/typeFromPropertyAssignment31.ts (2 errors) ====
6+
function ExpandoMerge(n: number) {
7+
return n;
8+
}
9+
ExpandoMerge.p1 = 111
10+
ExpandoMerge.m = function(n: number) {
11+
return n + 1;
12+
}
13+
namespace ExpandoMerge {
14+
export var p2 = 222;
15+
}
16+
ExpandoMerge.p4 = 44444; // ok
17+
ExpandoMerge.p6 = 66666; // ok
18+
ExpandoMerge.p8 = false; // type error
19+
~~~~~~~~~~~~~~~
20+
!!! error TS2322: Type 'false' is not assignable to type 'number'.
21+
namespace ExpandoMerge {
22+
export var p3 = 333;
23+
export var p4 = 4;
24+
export var p5 = 5;
25+
export let p6 = 6;
26+
export let p7 = 7;
27+
export var p8 = 6;
28+
export let p9 = 7;
29+
}
30+
ExpandoMerge.p5 = 555555; // ok
31+
ExpandoMerge.p7 = 777777; // ok
32+
ExpandoMerge.p9 = false; // type error
33+
~~~~~~~~~~~~~~~
34+
!!! error TS2322: Type 'false' is not assignable to type 'number'.
35+
var n = ExpandoMerge.p1 + ExpandoMerge.p2 + ExpandoMerge.p3 + ExpandoMerge.p4 + ExpandoMerge.p5 + ExpandoMerge.p6 + ExpandoMerge.p7 + ExpandoMerge.p8 + ExpandoMerge.p9 + ExpandoMerge.m(12) + ExpandoMerge(1001);
36+
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
//// [typeFromPropertyAssignment31.ts]
2+
function ExpandoMerge(n: number) {
3+
return n;
4+
}
5+
ExpandoMerge.p1 = 111
6+
ExpandoMerge.m = function(n: number) {
7+
return n + 1;
8+
}
9+
namespace ExpandoMerge {
10+
export var p2 = 222;
11+
}
12+
ExpandoMerge.p4 = 44444; // ok
13+
ExpandoMerge.p6 = 66666; // ok
14+
ExpandoMerge.p8 = false; // type error
15+
namespace ExpandoMerge {
16+
export var p3 = 333;
17+
export var p4 = 4;
18+
export var p5 = 5;
19+
export let p6 = 6;
20+
export let p7 = 7;
21+
export var p8 = 6;
22+
export let p9 = 7;
23+
}
24+
ExpandoMerge.p5 = 555555; // ok
25+
ExpandoMerge.p7 = 777777; // ok
26+
ExpandoMerge.p9 = false; // type error
27+
var n = ExpandoMerge.p1 + ExpandoMerge.p2 + ExpandoMerge.p3 + ExpandoMerge.p4 + ExpandoMerge.p5 + ExpandoMerge.p6 + ExpandoMerge.p7 + ExpandoMerge.p8 + ExpandoMerge.p9 + ExpandoMerge.m(12) + ExpandoMerge(1001);
28+
29+
30+
//// [typeFromPropertyAssignment31.js]
31+
function ExpandoMerge(n) {
32+
return n;
33+
}
34+
ExpandoMerge.p1 = 111;
35+
ExpandoMerge.m = function (n) {
36+
return n + 1;
37+
};
38+
(function (ExpandoMerge) {
39+
ExpandoMerge.p2 = 222;
40+
})(ExpandoMerge || (ExpandoMerge = {}));
41+
ExpandoMerge.p4 = 44444; // ok
42+
ExpandoMerge.p6 = 66666; // ok
43+
ExpandoMerge.p8 = false; // type error
44+
(function (ExpandoMerge) {
45+
ExpandoMerge.p3 = 333;
46+
ExpandoMerge.p4 = 4;
47+
ExpandoMerge.p5 = 5;
48+
ExpandoMerge.p6 = 6;
49+
ExpandoMerge.p7 = 7;
50+
ExpandoMerge.p8 = 6;
51+
ExpandoMerge.p9 = 7;
52+
})(ExpandoMerge || (ExpandoMerge = {}));
53+
ExpandoMerge.p5 = 555555; // ok
54+
ExpandoMerge.p7 = 777777; // ok
55+
ExpandoMerge.p9 = false; // type error
56+
var n = ExpandoMerge.p1 + ExpandoMerge.p2 + ExpandoMerge.p3 + ExpandoMerge.p4 + ExpandoMerge.p5 + ExpandoMerge.p6 + ExpandoMerge.p7 + ExpandoMerge.p8 + ExpandoMerge.p9 + ExpandoMerge.m(12) + ExpandoMerge(1001);
Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
=== tests/cases/conformance/salsa/typeFromPropertyAssignment31.ts ===
2+
function ExpandoMerge(n: number) {
3+
>ExpandoMerge : Symbol(ExpandoMerge, Decl(typeFromPropertyAssignment31.ts, 0, 0), Decl(typeFromPropertyAssignment31.ts, 3, 21), Decl(typeFromPropertyAssignment31.ts, 6, 1), Decl(typeFromPropertyAssignment31.ts, 12, 24))
4+
>n : Symbol(n, Decl(typeFromPropertyAssignment31.ts, 0, 22))
5+
6+
return n;
7+
>n : Symbol(n, Decl(typeFromPropertyAssignment31.ts, 0, 22))
8+
}
9+
ExpandoMerge.p1 = 111
10+
>ExpandoMerge.p1 : Symbol(ExpandoMerge.p1, Decl(typeFromPropertyAssignment31.ts, 2, 1))
11+
>ExpandoMerge : Symbol(ExpandoMerge, Decl(typeFromPropertyAssignment31.ts, 0, 0), Decl(typeFromPropertyAssignment31.ts, 3, 21), Decl(typeFromPropertyAssignment31.ts, 6, 1), Decl(typeFromPropertyAssignment31.ts, 12, 24))
12+
>p1 : Symbol(ExpandoMerge.p1, Decl(typeFromPropertyAssignment31.ts, 2, 1))
13+
14+
ExpandoMerge.m = function(n: number) {
15+
>ExpandoMerge.m : Symbol(ExpandoMerge.m, Decl(typeFromPropertyAssignment31.ts, 3, 21))
16+
>ExpandoMerge : Symbol(ExpandoMerge, Decl(typeFromPropertyAssignment31.ts, 0, 0), Decl(typeFromPropertyAssignment31.ts, 3, 21), Decl(typeFromPropertyAssignment31.ts, 6, 1), Decl(typeFromPropertyAssignment31.ts, 12, 24))
17+
>m : Symbol(ExpandoMerge.m, Decl(typeFromPropertyAssignment31.ts, 3, 21))
18+
>n : Symbol(n, Decl(typeFromPropertyAssignment31.ts, 4, 26))
19+
20+
return n + 1;
21+
>n : Symbol(n, Decl(typeFromPropertyAssignment31.ts, 4, 26))
22+
}
23+
namespace ExpandoMerge {
24+
>ExpandoMerge : Symbol(ExpandoMerge, Decl(typeFromPropertyAssignment31.ts, 0, 0), Decl(typeFromPropertyAssignment31.ts, 3, 21), Decl(typeFromPropertyAssignment31.ts, 6, 1), Decl(typeFromPropertyAssignment31.ts, 12, 24))
25+
26+
export var p2 = 222;
27+
>p2 : Symbol(p2, Decl(typeFromPropertyAssignment31.ts, 8, 14))
28+
}
29+
ExpandoMerge.p4 = 44444; // ok
30+
>ExpandoMerge.p4 : Symbol(ExpandoMerge.p4, Decl(typeFromPropertyAssignment31.ts, 9, 1), Decl(typeFromPropertyAssignment31.ts, 15, 14))
31+
>ExpandoMerge : Symbol(ExpandoMerge, Decl(typeFromPropertyAssignment31.ts, 0, 0), Decl(typeFromPropertyAssignment31.ts, 3, 21), Decl(typeFromPropertyAssignment31.ts, 6, 1), Decl(typeFromPropertyAssignment31.ts, 12, 24))
32+
>p4 : Symbol(ExpandoMerge.p4, Decl(typeFromPropertyAssignment31.ts, 9, 1), Decl(typeFromPropertyAssignment31.ts, 15, 14))
33+
34+
ExpandoMerge.p6 = 66666; // ok
35+
>ExpandoMerge.p6 : Symbol(ExpandoMerge.p6, Decl(typeFromPropertyAssignment31.ts, 10, 24), Decl(typeFromPropertyAssignment31.ts, 17, 14))
36+
>ExpandoMerge : Symbol(ExpandoMerge, Decl(typeFromPropertyAssignment31.ts, 0, 0), Decl(typeFromPropertyAssignment31.ts, 3, 21), Decl(typeFromPropertyAssignment31.ts, 6, 1), Decl(typeFromPropertyAssignment31.ts, 12, 24))
37+
>p6 : Symbol(ExpandoMerge.p6, Decl(typeFromPropertyAssignment31.ts, 10, 24), Decl(typeFromPropertyAssignment31.ts, 17, 14))
38+
39+
ExpandoMerge.p8 = false; // type error
40+
>ExpandoMerge.p8 : Symbol(ExpandoMerge.p8, Decl(typeFromPropertyAssignment31.ts, 11, 24), Decl(typeFromPropertyAssignment31.ts, 19, 14))
41+
>ExpandoMerge : Symbol(ExpandoMerge, Decl(typeFromPropertyAssignment31.ts, 0, 0), Decl(typeFromPropertyAssignment31.ts, 3, 21), Decl(typeFromPropertyAssignment31.ts, 6, 1), Decl(typeFromPropertyAssignment31.ts, 12, 24))
42+
>p8 : Symbol(ExpandoMerge.p8, Decl(typeFromPropertyAssignment31.ts, 11, 24), Decl(typeFromPropertyAssignment31.ts, 19, 14))
43+
44+
namespace ExpandoMerge {
45+
>ExpandoMerge : Symbol(ExpandoMerge, Decl(typeFromPropertyAssignment31.ts, 0, 0), Decl(typeFromPropertyAssignment31.ts, 3, 21), Decl(typeFromPropertyAssignment31.ts, 6, 1), Decl(typeFromPropertyAssignment31.ts, 12, 24))
46+
47+
export var p3 = 333;
48+
>p3 : Symbol(p3, Decl(typeFromPropertyAssignment31.ts, 14, 14))
49+
50+
export var p4 = 4;
51+
>p4 : Symbol(p4, Decl(typeFromPropertyAssignment31.ts, 9, 1), Decl(typeFromPropertyAssignment31.ts, 15, 14))
52+
53+
export var p5 = 5;
54+
>p5 : Symbol(p5, Decl(typeFromPropertyAssignment31.ts, 16, 14), Decl(typeFromPropertyAssignment31.ts, 21, 1))
55+
56+
export let p6 = 6;
57+
>p6 : Symbol(p6, Decl(typeFromPropertyAssignment31.ts, 10, 24), Decl(typeFromPropertyAssignment31.ts, 17, 14))
58+
59+
export let p7 = 7;
60+
>p7 : Symbol(p7, Decl(typeFromPropertyAssignment31.ts, 18, 14), Decl(typeFromPropertyAssignment31.ts, 22, 25))
61+
62+
export var p8 = 6;
63+
>p8 : Symbol(p8, Decl(typeFromPropertyAssignment31.ts, 11, 24), Decl(typeFromPropertyAssignment31.ts, 19, 14))
64+
65+
export let p9 = 7;
66+
>p9 : Symbol(p9, Decl(typeFromPropertyAssignment31.ts, 20, 14), Decl(typeFromPropertyAssignment31.ts, 23, 25))
67+
}
68+
ExpandoMerge.p5 = 555555; // ok
69+
>ExpandoMerge.p5 : Symbol(ExpandoMerge.p5, Decl(typeFromPropertyAssignment31.ts, 16, 14), Decl(typeFromPropertyAssignment31.ts, 21, 1))
70+
>ExpandoMerge : Symbol(ExpandoMerge, Decl(typeFromPropertyAssignment31.ts, 0, 0), Decl(typeFromPropertyAssignment31.ts, 3, 21), Decl(typeFromPropertyAssignment31.ts, 6, 1), Decl(typeFromPropertyAssignment31.ts, 12, 24))
71+
>p5 : Symbol(ExpandoMerge.p5, Decl(typeFromPropertyAssignment31.ts, 16, 14), Decl(typeFromPropertyAssignment31.ts, 21, 1))
72+
73+
ExpandoMerge.p7 = 777777; // ok
74+
>ExpandoMerge.p7 : Symbol(ExpandoMerge.p7, Decl(typeFromPropertyAssignment31.ts, 18, 14), Decl(typeFromPropertyAssignment31.ts, 22, 25))
75+
>ExpandoMerge : Symbol(ExpandoMerge, Decl(typeFromPropertyAssignment31.ts, 0, 0), Decl(typeFromPropertyAssignment31.ts, 3, 21), Decl(typeFromPropertyAssignment31.ts, 6, 1), Decl(typeFromPropertyAssignment31.ts, 12, 24))
76+
>p7 : Symbol(ExpandoMerge.p7, Decl(typeFromPropertyAssignment31.ts, 18, 14), Decl(typeFromPropertyAssignment31.ts, 22, 25))
77+
78+
ExpandoMerge.p9 = false; // type error
79+
>ExpandoMerge.p9 : Symbol(ExpandoMerge.p9, Decl(typeFromPropertyAssignment31.ts, 20, 14), Decl(typeFromPropertyAssignment31.ts, 23, 25))
80+
>ExpandoMerge : Symbol(ExpandoMerge, Decl(typeFromPropertyAssignment31.ts, 0, 0), Decl(typeFromPropertyAssignment31.ts, 3, 21), Decl(typeFromPropertyAssignment31.ts, 6, 1), Decl(typeFromPropertyAssignment31.ts, 12, 24))
81+
>p9 : Symbol(ExpandoMerge.p9, Decl(typeFromPropertyAssignment31.ts, 20, 14), Decl(typeFromPropertyAssignment31.ts, 23, 25))
82+
83+
var n = ExpandoMerge.p1 + ExpandoMerge.p2 + ExpandoMerge.p3 + ExpandoMerge.p4 + ExpandoMerge.p5 + ExpandoMerge.p6 + ExpandoMerge.p7 + ExpandoMerge.p8 + ExpandoMerge.p9 + ExpandoMerge.m(12) + ExpandoMerge(1001);
84+
>n : Symbol(n, Decl(typeFromPropertyAssignment31.ts, 25, 3))
85+
>ExpandoMerge.p1 : Symbol(ExpandoMerge.p1, Decl(typeFromPropertyAssignment31.ts, 2, 1))
86+
>ExpandoMerge : Symbol(ExpandoMerge, Decl(typeFromPropertyAssignment31.ts, 0, 0), Decl(typeFromPropertyAssignment31.ts, 3, 21), Decl(typeFromPropertyAssignment31.ts, 6, 1), Decl(typeFromPropertyAssignment31.ts, 12, 24))
87+
>p1 : Symbol(ExpandoMerge.p1, Decl(typeFromPropertyAssignment31.ts, 2, 1))
88+
>ExpandoMerge.p2 : Symbol(ExpandoMerge.p2, Decl(typeFromPropertyAssignment31.ts, 8, 14))
89+
>ExpandoMerge : Symbol(ExpandoMerge, Decl(typeFromPropertyAssignment31.ts, 0, 0), Decl(typeFromPropertyAssignment31.ts, 3, 21), Decl(typeFromPropertyAssignment31.ts, 6, 1), Decl(typeFromPropertyAssignment31.ts, 12, 24))
90+
>p2 : Symbol(ExpandoMerge.p2, Decl(typeFromPropertyAssignment31.ts, 8, 14))
91+
>ExpandoMerge.p3 : Symbol(ExpandoMerge.p3, Decl(typeFromPropertyAssignment31.ts, 14, 14))
92+
>ExpandoMerge : Symbol(ExpandoMerge, Decl(typeFromPropertyAssignment31.ts, 0, 0), Decl(typeFromPropertyAssignment31.ts, 3, 21), Decl(typeFromPropertyAssignment31.ts, 6, 1), Decl(typeFromPropertyAssignment31.ts, 12, 24))
93+
>p3 : Symbol(ExpandoMerge.p3, Decl(typeFromPropertyAssignment31.ts, 14, 14))
94+
>ExpandoMerge.p4 : Symbol(ExpandoMerge.p4, Decl(typeFromPropertyAssignment31.ts, 9, 1), Decl(typeFromPropertyAssignment31.ts, 15, 14))
95+
>ExpandoMerge : Symbol(ExpandoMerge, Decl(typeFromPropertyAssignment31.ts, 0, 0), Decl(typeFromPropertyAssignment31.ts, 3, 21), Decl(typeFromPropertyAssignment31.ts, 6, 1), Decl(typeFromPropertyAssignment31.ts, 12, 24))
96+
>p4 : Symbol(ExpandoMerge.p4, Decl(typeFromPropertyAssignment31.ts, 9, 1), Decl(typeFromPropertyAssignment31.ts, 15, 14))
97+
>ExpandoMerge.p5 : Symbol(ExpandoMerge.p5, Decl(typeFromPropertyAssignment31.ts, 16, 14), Decl(typeFromPropertyAssignment31.ts, 21, 1))
98+
>ExpandoMerge : Symbol(ExpandoMerge, Decl(typeFromPropertyAssignment31.ts, 0, 0), Decl(typeFromPropertyAssignment31.ts, 3, 21), Decl(typeFromPropertyAssignment31.ts, 6, 1), Decl(typeFromPropertyAssignment31.ts, 12, 24))
99+
>p5 : Symbol(ExpandoMerge.p5, Decl(typeFromPropertyAssignment31.ts, 16, 14), Decl(typeFromPropertyAssignment31.ts, 21, 1))
100+
>ExpandoMerge.p6 : Symbol(ExpandoMerge.p6, Decl(typeFromPropertyAssignment31.ts, 10, 24), Decl(typeFromPropertyAssignment31.ts, 17, 14))
101+
>ExpandoMerge : Symbol(ExpandoMerge, Decl(typeFromPropertyAssignment31.ts, 0, 0), Decl(typeFromPropertyAssignment31.ts, 3, 21), Decl(typeFromPropertyAssignment31.ts, 6, 1), Decl(typeFromPropertyAssignment31.ts, 12, 24))
102+
>p6 : Symbol(ExpandoMerge.p6, Decl(typeFromPropertyAssignment31.ts, 10, 24), Decl(typeFromPropertyAssignment31.ts, 17, 14))
103+
>ExpandoMerge.p7 : Symbol(ExpandoMerge.p7, Decl(typeFromPropertyAssignment31.ts, 18, 14), Decl(typeFromPropertyAssignment31.ts, 22, 25))
104+
>ExpandoMerge : Symbol(ExpandoMerge, Decl(typeFromPropertyAssignment31.ts, 0, 0), Decl(typeFromPropertyAssignment31.ts, 3, 21), Decl(typeFromPropertyAssignment31.ts, 6, 1), Decl(typeFromPropertyAssignment31.ts, 12, 24))
105+
>p7 : Symbol(ExpandoMerge.p7, Decl(typeFromPropertyAssignment31.ts, 18, 14), Decl(typeFromPropertyAssignment31.ts, 22, 25))
106+
>ExpandoMerge.p8 : Symbol(ExpandoMerge.p8, Decl(typeFromPropertyAssignment31.ts, 11, 24), Decl(typeFromPropertyAssignment31.ts, 19, 14))
107+
>ExpandoMerge : Symbol(ExpandoMerge, Decl(typeFromPropertyAssignment31.ts, 0, 0), Decl(typeFromPropertyAssignment31.ts, 3, 21), Decl(typeFromPropertyAssignment31.ts, 6, 1), Decl(typeFromPropertyAssignment31.ts, 12, 24))
108+
>p8 : Symbol(ExpandoMerge.p8, Decl(typeFromPropertyAssignment31.ts, 11, 24), Decl(typeFromPropertyAssignment31.ts, 19, 14))
109+
>ExpandoMerge.p9 : Symbol(ExpandoMerge.p9, Decl(typeFromPropertyAssignment31.ts, 20, 14), Decl(typeFromPropertyAssignment31.ts, 23, 25))
110+
>ExpandoMerge : Symbol(ExpandoMerge, Decl(typeFromPropertyAssignment31.ts, 0, 0), Decl(typeFromPropertyAssignment31.ts, 3, 21), Decl(typeFromPropertyAssignment31.ts, 6, 1), Decl(typeFromPropertyAssignment31.ts, 12, 24))
111+
>p9 : Symbol(ExpandoMerge.p9, Decl(typeFromPropertyAssignment31.ts, 20, 14), Decl(typeFromPropertyAssignment31.ts, 23, 25))
112+
>ExpandoMerge.m : Symbol(ExpandoMerge.m, Decl(typeFromPropertyAssignment31.ts, 3, 21))
113+
>ExpandoMerge : Symbol(ExpandoMerge, Decl(typeFromPropertyAssignment31.ts, 0, 0), Decl(typeFromPropertyAssignment31.ts, 3, 21), Decl(typeFromPropertyAssignment31.ts, 6, 1), Decl(typeFromPropertyAssignment31.ts, 12, 24))
114+
>m : Symbol(ExpandoMerge.m, Decl(typeFromPropertyAssignment31.ts, 3, 21))
115+
>ExpandoMerge : Symbol(ExpandoMerge, Decl(typeFromPropertyAssignment31.ts, 0, 0), Decl(typeFromPropertyAssignment31.ts, 3, 21), Decl(typeFromPropertyAssignment31.ts, 6, 1), Decl(typeFromPropertyAssignment31.ts, 12, 24))
116+

0 commit comments

Comments
 (0)