From d0a8b21d939aba7ed3c624db081c578d0fc1ba5d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Mateusz=20Burzy=C5=84ski?= <mateuszburzynski@gmail.com>
Date: Sun, 16 Mar 2025 10:33:14 +0100
Subject: [PATCH 1/3] Sort numeric symbols

---
 internal/checker/checker.go                   |   5 +
 internal/checker/utilities.go                 |  12 ++
 .../declarationEmitLateBoundAssignments.types |  20 +--
 ...arationEmitLateBoundAssignments.types.diff |  20 +--
 ...eclarationEmitLateBoundJSAssignments.types |  20 +--
 ...ationEmitLateBoundJSAssignments.types.diff |  20 +--
 ...tionEmitPartialReuseComputedProperty.types |  12 +-
 ...mitPartialReuseComputedProperty.types.diff |  12 +-
 .../submodule/compiler/dynamicNames.types     |  12 +-
 .../compiler/dynamicNames.types.diff          |  12 +-
 .../isolatedDeclarationErrorsObjects.types    |   4 +-
 ...solatedDeclarationErrorsObjects.types.diff |   4 +-
 .../compiler/keyofDoesntContainSymbols.types  |  12 +-
 .../keyofDoesntContainSymbols.types.diff      |  12 +-
 .../mappedTypeIndexedAccessConstraint.types   |   8 +-
 ...ppedTypeIndexedAccessConstraint.types.diff |   8 +-
 .../normalizedIntersectionTooComplex.types    |  82 ++++++-------
 ...ormalizedIntersectionTooComplex.types.diff |  82 ++++++-------
 .../numericIndexerConstraint5.errors.txt      |   4 +-
 .../numericIndexerConstraint5.errors.txt.diff |  16 +++
 .../compiler/numericIndexerConstraint5.types  |   6 +-
 .../numericIndexerConstraint5.types.diff      |  20 +++
 .../compiler/objectLiteralIndexerErrors.types |   6 +-
 .../objectLiteralIndexerErrors.types.diff     |  20 +++
 .../compiler/objectLiteralIndexers.types      |  10 +-
 .../compiler/objectLiteralIndexers.types.diff |  31 +++++
 .../compiler/propertiesAndIndexers.types      |   2 +-
 .../compiler/propertiesAndIndexers.types.diff |   9 ++
 .../compiler/ramdaToolsNoInfinite2.types      |   4 +-
 .../compiler/ramdaToolsNoInfinite2.types.diff |   4 +-
 .../restElementWithNumberPropertyName.types   |   2 +-
 ...stElementWithNumberPropertyName.types.diff |   2 +-
 .../restParameterWithBindingPattern3.types    |   2 +-
 ...estParameterWithBindingPattern3.types.diff |   2 +-
 .../arityAndOrderCompatibility01.errors.txt   |  10 +-
 ...ityAndOrderCompatibility01.errors.txt.diff |  25 +---
 .../computedPropertyNames10_ES5.types         |   4 +-
 .../computedPropertyNames10_ES5.types.diff    |   4 +-
 .../computedPropertyNames10_ES6.types         |   4 +-
 .../computedPropertyNames10_ES6.types.diff    |   4 +-
 .../computedPropertyNames11_ES5.types         |   4 +-
 .../computedPropertyNames11_ES5.types.diff    |   4 +-
 .../computedPropertyNames11_ES6.types         |   4 +-
 .../computedPropertyNames11_ES6.types.diff    |   4 +-
 .../computedPropertyNames4_ES5.types          |   4 +-
 .../computedPropertyNames4_ES5.types.diff     |   4 +-
 .../computedPropertyNames4_ES6.types          |   4 +-
 .../computedPropertyNames4_ES6.types.diff     |   4 +-
 ...utedPropertyNamesContextualType6_ES5.types |   2 +-
 ...ropertyNamesContextualType6_ES5.types.diff |   2 +-
 ...utedPropertyNamesContextualType6_ES6.types |   2 +-
 ...ropertyNamesContextualType6_ES6.types.diff |   2 +-
 ...ntiationAssignmentWithIndexingOnLHS3.types |  16 +--
 ...ionAssignmentWithIndexingOnLHS3.types.diff |  51 ++++++++
 .../conformance/importAttributes7.types       |   4 +-
 .../conformance/importAttributes7.types.diff  |  15 ++-
 .../conformance/indexSignatures1.types        |   4 +-
 .../conformance/indexSignatures1.types.diff   |   4 +-
 ...ndexerConstrainsPropertyDeclarations.types |   4 +-
 ...rConstrainsPropertyDeclarations.types.diff |   4 +-
 ...dexerConstrainsPropertyDeclarations2.types |   4 +-
 ...ConstrainsPropertyDeclarations2.types.diff |   4 +-
 ...ropertiesErrorFromNotUsingIdentifier.types |   8 +-
 ...tiesErrorFromNotUsingIdentifier.types.diff |  17 ++-
 ...ctTypeWithStringNamedNumericProperty.types |  30 ++---
 ...eWithStringNamedNumericProperty.types.diff | 116 ++++++++++++++++++
 .../objectTypesWithOptionalProperties2.types  |   4 +-
 ...ectTypesWithOptionalProperties2.types.diff |   4 +-
 ...ndexerConstrainsPropertyDeclarations.types |   4 +-
 ...rConstrainsPropertyDeclarations.types.diff |   4 +-
 70 files changed, 582 insertions(+), 303 deletions(-)
 create mode 100644 testdata/baselines/reference/submodule/compiler/numericIndexerConstraint5.errors.txt.diff
 create mode 100644 testdata/baselines/reference/submodule/compiler/numericIndexerConstraint5.types.diff
 create mode 100644 testdata/baselines/reference/submodule/conformance/emitCompoundExponentiationAssignmentWithIndexingOnLHS3.types.diff

diff --git a/internal/checker/checker.go b/internal/checker/checker.go
index ec83d74faf..19d03d3ee0 100644
--- a/internal/checker/checker.go
+++ b/internal/checker/checker.go
@@ -4,6 +4,8 @@ import (
 	"fmt"
 	"maps"
 	"math"
+
+	// "runtime"
 	"slices"
 	"strconv"
 	"strings"
@@ -23090,6 +23092,9 @@ func (c *Checker) setStructuredTypeMembers(t *Type, members ast.SymbolTable, cal
 	t.objectFlags |= ObjectFlagsMembersResolved
 	data := t.AsStructuredType()
 	data.members = members
+	// if t.id == 167 {
+	// 	runtime.Breakpoint()
+	// }
 	data.properties = c.getNamedMembers(members)
 	if len(callSignatures) != 0 {
 		if len(constructSignatures) != 0 {
diff --git a/internal/checker/utilities.go b/internal/checker/utilities.go
index bce86c616f..d6ac26990a 100644
--- a/internal/checker/utilities.go
+++ b/internal/checker/utilities.go
@@ -3,6 +3,7 @@ package checker
 import (
 	"cmp"
 	"slices"
+	"strconv"
 	"strings"
 	"sync"
 
@@ -632,6 +633,17 @@ func (c *Checker) compareSymbolsWorker(s1, s2 *ast.Symbol) int {
 	if s2 == nil {
 		return -1
 	}
+	int1, err1 := strconv.Atoi(s1.Name)
+	int2, err2 := strconv.Atoi(s2.Name)
+	if err1 == nil && err2 == nil {
+		if rv := cmp.Compare(int1, int2); rv != 0 {
+			return rv
+		}
+	} else if err1 == nil {
+		return -1
+	} else if err2 == nil {
+		return 1
+	}
 	if len(s1.Declarations) != 0 && len(s2.Declarations) != 0 {
 		if r := c.compareNodes(s1.Declarations[0], s2.Declarations[0]); r != 0 {
 			return r
diff --git a/testdata/baselines/reference/submodule/compiler/declarationEmitLateBoundAssignments.types b/testdata/baselines/reference/submodule/compiler/declarationEmitLateBoundAssignments.types
index 7190426992..38b38bc7b4 100644
--- a/testdata/baselines/reference/submodule/compiler/declarationEmitLateBoundAssignments.types
+++ b/testdata/baselines/reference/submodule/compiler/declarationEmitLateBoundAssignments.types
@@ -2,12 +2,12 @@
 
 === declarationEmitLateBoundAssignments.ts ===
 export function foo() {}
->foo : { (): void; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; foo[numMem]: string; }
+>foo : { (): void; foo[numMem]: string; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; }
 
 foo.bar = 12;
 >foo.bar = 12 : 12
 >foo.bar : number
->foo : { (): void; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; foo[numMem]: string; }
+>foo : { (): void; foo[numMem]: string; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; }
 >bar : number
 >12 : 12
 
@@ -19,7 +19,7 @@ const _private = Symbol();
 foo[_private] = "ok";
 >foo[_private] = "ok" : "ok"
 >foo[_private] : string
->foo : { (): void; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; foo[numMem]: string; }
+>foo : { (): void; foo[numMem]: string; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; }
 >_private : unique symbol
 >"ok" : "ok"
 
@@ -30,7 +30,7 @@ const strMem = "strMemName";
 foo[strMem] = "ok";
 >foo[strMem] = "ok" : "ok"
 >foo[strMem] : string
->foo : { (): void; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; foo[numMem]: string; }
+>foo : { (): void; foo[numMem]: string; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; }
 >strMem : "strMemName"
 >"ok" : "ok"
 
@@ -41,7 +41,7 @@ const dashStrMem = "dashed-str-mem";
 foo[dashStrMem] = "ok";
 >foo[dashStrMem] = "ok" : "ok"
 >foo[dashStrMem] : string
->foo : { (): void; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; foo[numMem]: string; }
+>foo : { (): void; foo[numMem]: string; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; }
 >dashStrMem : "dashed-str-mem"
 >"ok" : "ok"
 
@@ -52,31 +52,31 @@ const numMem = 42;
 foo[numMem] = "ok";
 >foo[numMem] = "ok" : "ok"
 >foo[numMem] : string
->foo : { (): void; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; foo[numMem]: string; }
+>foo : { (): void; foo[numMem]: string; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; }
 >numMem : 42
 >"ok" : "ok"
 
 const x: string = foo[_private];
 >x : string
 >foo[_private] : string
->foo : { (): void; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; foo[numMem]: string; }
+>foo : { (): void; foo[numMem]: string; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; }
 >_private : unique symbol
 
 const y: string = foo[strMem];
 >y : string
 >foo[strMem] : string
->foo : { (): void; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; foo[numMem]: string; }
+>foo : { (): void; foo[numMem]: string; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; }
 >strMem : "strMemName"
 
 const z: string = foo[numMem];
 >z : string
 >foo[numMem] : string
->foo : { (): void; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; foo[numMem]: string; }
+>foo : { (): void; foo[numMem]: string; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; }
 >numMem : 42
 
 const a: string = foo[dashStrMem];
 >a : string
 >foo[dashStrMem] : string
->foo : { (): void; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; foo[numMem]: string; }
+>foo : { (): void; foo[numMem]: string; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; }
 >dashStrMem : "dashed-str-mem"
 
diff --git a/testdata/baselines/reference/submodule/compiler/declarationEmitLateBoundAssignments.types.diff b/testdata/baselines/reference/submodule/compiler/declarationEmitLateBoundAssignments.types.diff
index 31fd477630..259387769e 100644
--- a/testdata/baselines/reference/submodule/compiler/declarationEmitLateBoundAssignments.types.diff
+++ b/testdata/baselines/reference/submodule/compiler/declarationEmitLateBoundAssignments.types.diff
@@ -5,13 +5,13 @@
  === declarationEmitLateBoundAssignments.ts ===
  export function foo() {}
 ->foo : typeof foo
-+>foo : { (): void; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; foo[numMem]: string; }
++>foo : { (): void; foo[numMem]: string; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; }
  
  foo.bar = 12;
  >foo.bar = 12 : 12
  >foo.bar : number
 ->foo : typeof foo
-+>foo : { (): void; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; foo[numMem]: string; }
++>foo : { (): void; foo[numMem]: string; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; }
  >bar : number
  >12 : 12
  
@@ -20,7 +20,7 @@
  >foo[_private] = "ok" : "ok"
  >foo[_private] : string
 ->foo : typeof foo
-+>foo : { (): void; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; foo[numMem]: string; }
++>foo : { (): void; foo[numMem]: string; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; }
  >_private : unique symbol
  >"ok" : "ok"
  
@@ -29,7 +29,7 @@
  >foo[strMem] = "ok" : "ok"
  >foo[strMem] : string
 ->foo : typeof foo
-+>foo : { (): void; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; foo[numMem]: string; }
++>foo : { (): void; foo[numMem]: string; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; }
  >strMem : "strMemName"
  >"ok" : "ok"
  
@@ -38,7 +38,7 @@
  >foo[dashStrMem] = "ok" : "ok"
  >foo[dashStrMem] : string
 ->foo : typeof foo
-+>foo : { (): void; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; foo[numMem]: string; }
++>foo : { (): void; foo[numMem]: string; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; }
  >dashStrMem : "dashed-str-mem"
  >"ok" : "ok"
  
@@ -47,7 +47,7 @@
  >foo[numMem] = "ok" : "ok"
  >foo[numMem] : string
 ->foo : typeof foo
-+>foo : { (): void; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; foo[numMem]: string; }
++>foo : { (): void; foo[numMem]: string; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; }
  >numMem : 42
  >"ok" : "ok"
  
@@ -55,27 +55,27 @@
  >x : string
  >foo[_private] : string
 ->foo : typeof foo
-+>foo : { (): void; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; foo[numMem]: string; }
++>foo : { (): void; foo[numMem]: string; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; }
  >_private : unique symbol
  
  const y: string = foo[strMem];
  >y : string
  >foo[strMem] : string
 ->foo : typeof foo
-+>foo : { (): void; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; foo[numMem]: string; }
++>foo : { (): void; foo[numMem]: string; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; }
  >strMem : "strMemName"
  
  const z: string = foo[numMem];
  >z : string
  >foo[numMem] : string
 ->foo : typeof foo
-+>foo : { (): void; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; foo[numMem]: string; }
++>foo : { (): void; foo[numMem]: string; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; }
  >numMem : 42
  
  const a: string = foo[dashStrMem];
  >a : string
  >foo[dashStrMem] : string
 ->foo : typeof foo
-+>foo : { (): void; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; foo[numMem]: string; }
++>foo : { (): void; foo[numMem]: string; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; }
  >dashStrMem : "dashed-str-mem"
  
diff --git a/testdata/baselines/reference/submodule/compiler/declarationEmitLateBoundJSAssignments.types b/testdata/baselines/reference/submodule/compiler/declarationEmitLateBoundJSAssignments.types
index 55206ad169..1912251cd3 100644
--- a/testdata/baselines/reference/submodule/compiler/declarationEmitLateBoundJSAssignments.types
+++ b/testdata/baselines/reference/submodule/compiler/declarationEmitLateBoundJSAssignments.types
@@ -2,12 +2,12 @@
 
 === file.js ===
 export function foo() {}
->foo : { (): void; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; foo[numMem]: string; }
+>foo : { (): void; foo[numMem]: string; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; }
 
 foo.bar = 12;
 >foo.bar = 12 : 12
 >foo.bar : number
->foo : { (): void; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; foo[numMem]: string; }
+>foo : { (): void; foo[numMem]: string; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; }
 >bar : number
 >12 : 12
 
@@ -19,7 +19,7 @@ const _private = Symbol();
 foo[_private] = "ok";
 >foo[_private] = "ok" : "ok"
 >foo[_private] : string
->foo : { (): void; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; foo[numMem]: string; }
+>foo : { (): void; foo[numMem]: string; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; }
 >_private : unique symbol
 >"ok" : "ok"
 
@@ -30,7 +30,7 @@ const strMem = "strMemName";
 foo[strMem] = "ok";
 >foo[strMem] = "ok" : "ok"
 >foo[strMem] : string
->foo : { (): void; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; foo[numMem]: string; }
+>foo : { (): void; foo[numMem]: string; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; }
 >strMem : "strMemName"
 >"ok" : "ok"
 
@@ -41,7 +41,7 @@ const dashStrMem = "dashed-str-mem";
 foo[dashStrMem] = "ok";
 >foo[dashStrMem] = "ok" : "ok"
 >foo[dashStrMem] : string
->foo : { (): void; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; foo[numMem]: string; }
+>foo : { (): void; foo[numMem]: string; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; }
 >dashStrMem : "dashed-str-mem"
 >"ok" : "ok"
 
@@ -52,7 +52,7 @@ const numMem = 42;
 foo[numMem] = "ok";
 >foo[numMem] = "ok" : "ok"
 >foo[numMem] : string
->foo : { (): void; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; foo[numMem]: string; }
+>foo : { (): void; foo[numMem]: string; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; }
 >numMem : 42
 >"ok" : "ok"
 
@@ -60,27 +60,27 @@ foo[numMem] = "ok";
 const x = foo[_private];
 >x : string
 >foo[_private] : string
->foo : { (): void; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; foo[numMem]: string; }
+>foo : { (): void; foo[numMem]: string; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; }
 >_private : unique symbol
 
 /** @type {string} */
 const y = foo[strMem];
 >y : string
 >foo[strMem] : string
->foo : { (): void; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; foo[numMem]: string; }
+>foo : { (): void; foo[numMem]: string; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; }
 >strMem : "strMemName"
 
 /** @type {string} */
 const z = foo[numMem];
 >z : string
 >foo[numMem] : string
->foo : { (): void; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; foo[numMem]: string; }
+>foo : { (): void; foo[numMem]: string; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; }
 >numMem : 42
 
 /** @type {string} */
 const a = foo[dashStrMem];
 >a : string
 >foo[dashStrMem] : string
->foo : { (): void; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; foo[numMem]: string; }
+>foo : { (): void; foo[numMem]: string; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; }
 >dashStrMem : "dashed-str-mem"
 
diff --git a/testdata/baselines/reference/submodule/compiler/declarationEmitLateBoundJSAssignments.types.diff b/testdata/baselines/reference/submodule/compiler/declarationEmitLateBoundJSAssignments.types.diff
index 23ad028a06..7febaf0d5c 100644
--- a/testdata/baselines/reference/submodule/compiler/declarationEmitLateBoundJSAssignments.types.diff
+++ b/testdata/baselines/reference/submodule/compiler/declarationEmitLateBoundJSAssignments.types.diff
@@ -5,13 +5,13 @@
  === file.js ===
  export function foo() {}
 ->foo : typeof foo
-+>foo : { (): void; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; foo[numMem]: string; }
++>foo : { (): void; foo[numMem]: string; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; }
  
  foo.bar = 12;
  >foo.bar = 12 : 12
  >foo.bar : number
 ->foo : typeof foo
-+>foo : { (): void; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; foo[numMem]: string; }
++>foo : { (): void; foo[numMem]: string; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; }
  >bar : number
  >12 : 12
  
@@ -20,7 +20,7 @@
  >foo[_private] = "ok" : "ok"
  >foo[_private] : string
 ->foo : typeof foo
-+>foo : { (): void; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; foo[numMem]: string; }
++>foo : { (): void; foo[numMem]: string; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; }
  >_private : unique symbol
  >"ok" : "ok"
  
@@ -29,7 +29,7 @@
  >foo[strMem] = "ok" : "ok"
  >foo[strMem] : string
 ->foo : typeof foo
-+>foo : { (): void; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; foo[numMem]: string; }
++>foo : { (): void; foo[numMem]: string; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; }
  >strMem : "strMemName"
  >"ok" : "ok"
  
@@ -38,7 +38,7 @@
  >foo[dashStrMem] = "ok" : "ok"
  >foo[dashStrMem] : string
 ->foo : typeof foo
-+>foo : { (): void; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; foo[numMem]: string; }
++>foo : { (): void; foo[numMem]: string; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; }
  >dashStrMem : "dashed-str-mem"
  >"ok" : "ok"
  
@@ -47,7 +47,7 @@
  >foo[numMem] = "ok" : "ok"
  >foo[numMem] : string
 ->foo : typeof foo
-+>foo : { (): void; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; foo[numMem]: string; }
++>foo : { (): void; foo[numMem]: string; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; }
  >numMem : 42
  >"ok" : "ok"
  
@@ -56,7 +56,7 @@
  >x : string
  >foo[_private] : string
 ->foo : typeof foo
-+>foo : { (): void; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; foo[numMem]: string; }
++>foo : { (): void; foo[numMem]: string; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; }
  >_private : unique symbol
  
  /** @type {string} */
@@ -64,7 +64,7 @@
  >y : string
  >foo[strMem] : string
 ->foo : typeof foo
-+>foo : { (): void; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; foo[numMem]: string; }
++>foo : { (): void; foo[numMem]: string; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; }
  >strMem : "strMemName"
  
  /** @type {string} */
@@ -72,7 +72,7 @@
  >z : string
  >foo[numMem] : string
 ->foo : typeof foo
-+>foo : { (): void; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; foo[numMem]: string; }
++>foo : { (): void; foo[numMem]: string; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; }
  >numMem : 42
  
  /** @type {string} */
@@ -80,6 +80,6 @@
  >a : string
  >foo[dashStrMem] : string
 ->foo : typeof foo
-+>foo : { (): void; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; foo[numMem]: string; }
++>foo : { (): void; foo[numMem]: string; bar: number; foo[_private]: string; strMemName: string; foo[dashStrMem]: string; }
  >dashStrMem : "dashed-str-mem"
  
diff --git a/testdata/baselines/reference/submodule/compiler/declarationEmitPartialReuseComputedProperty.types b/testdata/baselines/reference/submodule/compiler/declarationEmitPartialReuseComputedProperty.types
index 4bbd6cf447..1f0547fd5d 100644
--- a/testdata/baselines/reference/submodule/compiler/declarationEmitPartialReuseComputedProperty.types
+++ b/testdata/baselines/reference/submodule/compiler/declarationEmitPartialReuseComputedProperty.types
@@ -15,9 +15,9 @@ export const neg = -1;
 >1 : 1
 
 export const o = () => null! as { [n]: string, foo: string, [poz]: number, [neg]: number }
->o : () => { A: string; foo: string; [poz]: number; [neg]: number; }
->() => null! as { [n]: string, foo: string, [poz]: number, [neg]: number } : () => { A: string; foo: string; [poz]: number; [neg]: number; }
->null! as { [n]: string, foo: string, [poz]: number, [neg]: number } : { A: string; foo: string; [poz]: number; [neg]: number; }
+>o : () => { [neg]: number; [poz]: number; A: string; foo: string; }
+>() => null! as { [n]: string, foo: string, [poz]: number, [neg]: number } : () => { [neg]: number; [poz]: number; A: string; foo: string; }
+>null! as { [n]: string, foo: string, [poz]: number, [neg]: number } : { [neg]: number; [poz]: number; A: string; foo: string; }
 >null! : never
 >[n] : string
 >n : "A"
@@ -29,9 +29,9 @@ export const o = () => null! as { [n]: string, foo: string, [poz]: number, [neg]
 
 === b.ts ===
 import { o } from "./a";
->o : () => { A: string; foo: string; [poz]: number; [neg]: number; }
+>o : () => { [neg]: number; [poz]: number; A: string; foo: string; }
 
 export const g = o
->g : () => { A: string; foo: string; [poz]: number; [neg]: number; }
->o : () => { A: string; foo: string; [poz]: number; [neg]: number; }
+>g : () => { [neg]: number; [poz]: number; A: string; foo: string; }
+>o : () => { [neg]: number; [poz]: number; A: string; foo: string; }
 
diff --git a/testdata/baselines/reference/submodule/compiler/declarationEmitPartialReuseComputedProperty.types.diff b/testdata/baselines/reference/submodule/compiler/declarationEmitPartialReuseComputedProperty.types.diff
index e1d9bb6334..16a7ee5728 100644
--- a/testdata/baselines/reference/submodule/compiler/declarationEmitPartialReuseComputedProperty.types.diff
+++ b/testdata/baselines/reference/submodule/compiler/declarationEmitPartialReuseComputedProperty.types.diff
@@ -7,9 +7,9 @@
 ->o : () => { [n]: string; foo: string; [poz]: number; [neg]: number; }
 ->() => null! as { [n]: string, foo: string, [poz]: number, [neg]: number } : () => { [n]: string; foo: string; [poz]: number; [neg]: number; }
 ->null! as { [n]: string, foo: string, [poz]: number, [neg]: number } : { foo: string; A: string; 1: number; [-1]: number; }
-+>o : () => { A: string; foo: string; [poz]: number; [neg]: number; }
-+>() => null! as { [n]: string, foo: string, [poz]: number, [neg]: number } : () => { A: string; foo: string; [poz]: number; [neg]: number; }
-+>null! as { [n]: string, foo: string, [poz]: number, [neg]: number } : { A: string; foo: string; [poz]: number; [neg]: number; }
++>o : () => { [neg]: number; [poz]: number; A: string; foo: string; }
++>() => null! as { [n]: string, foo: string, [poz]: number, [neg]: number } : () => { [neg]: number; [poz]: number; A: string; foo: string; }
++>null! as { [n]: string, foo: string, [poz]: number, [neg]: number } : { [neg]: number; [poz]: number; A: string; foo: string; }
  >null! : never
  >[n] : string
  >n : "A"
@@ -18,11 +18,11 @@
  === b.ts ===
  import { o } from "./a";
 ->o : () => { A: string; foo: string; 1: number; [-1]: number; }
-+>o : () => { A: string; foo: string; [poz]: number; [neg]: number; }
++>o : () => { [neg]: number; [poz]: number; A: string; foo: string; }
  
  export const g = o
 ->g : () => { A: string; foo: string; 1: number; [-1]: number; }
 ->o : () => { A: string; foo: string; 1: number; [-1]: number; }
-+>g : () => { A: string; foo: string; [poz]: number; [neg]: number; }
-+>o : () => { A: string; foo: string; [poz]: number; [neg]: number; }
++>g : () => { [neg]: number; [poz]: number; A: string; foo: string; }
++>o : () => { [neg]: number; [poz]: number; A: string; foo: string; }
  
diff --git a/testdata/baselines/reference/submodule/compiler/dynamicNames.types b/testdata/baselines/reference/submodule/compiler/dynamicNames.types
index 3750e7cd26..4e59cc7b66 100644
--- a/testdata/baselines/reference/submodule/compiler/dynamicNames.types
+++ b/testdata/baselines/reference/submodule/compiler/dynamicNames.types
@@ -492,8 +492,8 @@ t0 = C; // static side
 
 // object literals
 export const o1 = {
->o1 : { a: number; [c5]: string; [s2]: boolean; }
->{    [c4]: 1,    [c5]: "a",    [s2]: true} : { a: number; [c5]: string; [s2]: boolean; }
+>o1 : { [c5]: string; a: number; [s2]: boolean; }
+>{    [c4]: 1,    [c5]: "a",    [s2]: true} : { [c5]: string; a: number; [s2]: boolean; }
 
     [c4]: 1,
 >[c4] : number
@@ -516,24 +516,24 @@ export const o1 = {
 export const o1_c4 = o1[c4];
 >o1_c4 : number
 >o1[c4] : number
->o1 : { a: number; [c5]: string; [s2]: boolean; }
+>o1 : { [c5]: string; a: number; [s2]: boolean; }
 >c4 : "a"
 
 export const o1_c5 = o1[c5];
 >o1_c5 : string
 >o1[c5] : string
->o1 : { a: number; [c5]: string; [s2]: boolean; }
+>o1 : { [c5]: string; a: number; [s2]: boolean; }
 >c5 : 1
 
 export const o1_s2 = o1[s2];
 >o1_s2 : boolean
 >o1[s2] : boolean
->o1 : { a: number; [c5]: string; [s2]: boolean; }
+>o1 : { [c5]: string; a: number; [s2]: boolean; }
 >s2 : unique symbol
 
 export const o2: T0 = o1;
 >o2 : T0
->o1 : { a: number; [c5]: string; [s2]: boolean; }
+>o1 : { [c5]: string; a: number; [s2]: boolean; }
 
 // recursive declarations
 // (type parameter indirection courtesy of #20400)
diff --git a/testdata/baselines/reference/submodule/compiler/dynamicNames.types.diff b/testdata/baselines/reference/submodule/compiler/dynamicNames.types.diff
index 5290b013bc..dbe8371b59 100644
--- a/testdata/baselines/reference/submodule/compiler/dynamicNames.types.diff
+++ b/testdata/baselines/reference/submodule/compiler/dynamicNames.types.diff
@@ -182,8 +182,8 @@
  export const o1 = {
 ->o1 : { a: number; 1: string; [s0]: boolean; }
 ->{    [c4]: 1,    [c5]: "a",    [s2]: true} : { a: number; 1: string; [s0]: boolean; }
-+>o1 : { a: number; [c5]: string; [s2]: boolean; }
-+>{    [c4]: 1,    [c5]: "a",    [s2]: true} : { a: number; [c5]: string; [s2]: boolean; }
++>o1 : { [c5]: string; a: number; [s2]: boolean; }
++>{    [c4]: 1,    [c5]: "a",    [s2]: true} : { [c5]: string; a: number; [s2]: boolean; }
  
      [c4]: 1,
  >[c4] : number
@@ -192,27 +192,27 @@
  >o1_c4 : number
  >o1[c4] : number
 ->o1 : { a: number; 1: string; [s0]: boolean; }
-+>o1 : { a: number; [c5]: string; [s2]: boolean; }
++>o1 : { [c5]: string; a: number; [s2]: boolean; }
  >c4 : "a"
  
  export const o1_c5 = o1[c5];
  >o1_c5 : string
  >o1[c5] : string
 ->o1 : { a: number; 1: string; [s0]: boolean; }
-+>o1 : { a: number; [c5]: string; [s2]: boolean; }
++>o1 : { [c5]: string; a: number; [s2]: boolean; }
  >c5 : 1
  
  export const o1_s2 = o1[s2];
  >o1_s2 : boolean
  >o1[s2] : boolean
 ->o1 : { a: number; 1: string; [s0]: boolean; }
-+>o1 : { a: number; [c5]: string; [s2]: boolean; }
++>o1 : { [c5]: string; a: number; [s2]: boolean; }
  >s2 : unique symbol
  
  export const o2: T0 = o1;
  >o2 : T0
 ->o1 : { a: number; 1: string; [s0]: boolean; }
-+>o1 : { a: number; [c5]: string; [s2]: boolean; }
++>o1 : { [c5]: string; a: number; [s2]: boolean; }
  
  // recursive declarations
  // (type parameter indirection courtesy of #20400)
diff --git a/testdata/baselines/reference/submodule/compiler/isolatedDeclarationErrorsObjects.types b/testdata/baselines/reference/submodule/compiler/isolatedDeclarationErrorsObjects.types
index 183686c48d..ba946f5d2e 100644
--- a/testdata/baselines/reference/submodule/compiler/isolatedDeclarationErrorsObjects.types
+++ b/testdata/baselines/reference/submodule/compiler/isolatedDeclarationErrorsObjects.types
@@ -173,8 +173,8 @@ enum E {
 >10 : 10
 }
 export const oWithComputedProperties = {
->oWithComputedProperties : { [x: string]: number; [x: number]: number; [1]: number; [prop(2)]: number; [s]: number; [E.V]: number; }
->{    [1]: 1,    [1 + 3]: 1,    [prop(2)]: 2,    [s]: 1,    [E.V]: 1,    [str]: 0,} : { [x: string]: number; [x: number]: number; [1]: number; [prop(2)]: number; [s]: number; [E.V]: number; }
+>oWithComputedProperties : { [x: string]: number; [x: number]: number; [1]: number; [prop(2)]: number; [E.V]: number; [s]: number; }
+>{    [1]: 1,    [1 + 3]: 1,    [prop(2)]: 2,    [s]: 1,    [E.V]: 1,    [str]: 0,} : { [x: string]: number; [x: number]: number; [1]: number; [prop(2)]: number; [E.V]: number; [s]: number; }
 
     [1]: 1,
 >[1] : number
diff --git a/testdata/baselines/reference/submodule/compiler/isolatedDeclarationErrorsObjects.types.diff b/testdata/baselines/reference/submodule/compiler/isolatedDeclarationErrorsObjects.types.diff
index 67d851d14a..29a370bb0c 100644
--- a/testdata/baselines/reference/submodule/compiler/isolatedDeclarationErrorsObjects.types.diff
+++ b/testdata/baselines/reference/submodule/compiler/isolatedDeclarationErrorsObjects.types.diff
@@ -50,8 +50,8 @@
  export const oWithComputedProperties = {
 ->oWithComputedProperties : { [x: string]: number; [x: number]: number; 1: number; 2: number; [s]: number; 10: number; }
 ->{    [1]: 1,    [1 + 3]: 1,    [prop(2)]: 2,    [s]: 1,    [E.V]: 1,    [str]: 0,} : { [x: string]: number; [x: number]: number; 1: number; 2: number; [s]: number; 10: number; }
-+>oWithComputedProperties : { [x: string]: number; [x: number]: number; [1]: number; [prop(2)]: number; [s]: number; [E.V]: number; }
-+>{    [1]: 1,    [1 + 3]: 1,    [prop(2)]: 2,    [s]: 1,    [E.V]: 1,    [str]: 0,} : { [x: string]: number; [x: number]: number; [1]: number; [prop(2)]: number; [s]: number; [E.V]: number; }
++>oWithComputedProperties : { [x: string]: number; [x: number]: number; [1]: number; [prop(2)]: number; [E.V]: number; [s]: number; }
++>{    [1]: 1,    [1 + 3]: 1,    [prop(2)]: 2,    [s]: 1,    [E.V]: 1,    [str]: 0,} : { [x: string]: number; [x: number]: number; [1]: number; [prop(2)]: number; [E.V]: number; [s]: number; }
  
      [1]: 1,
  >[1] : number
diff --git a/testdata/baselines/reference/submodule/compiler/keyofDoesntContainSymbols.types b/testdata/baselines/reference/submodule/compiler/keyofDoesntContainSymbols.types
index e346e42729..b7d6b53f37 100644
--- a/testdata/baselines/reference/submodule/compiler/keyofDoesntContainSymbols.types
+++ b/testdata/baselines/reference/submodule/compiler/keyofDoesntContainSymbols.types
@@ -11,8 +11,8 @@ const num = 0;
 >0 : 0
 
 const obj = { num: 0, str: 's', [num]: num as 0, [sym]: sym };
->obj : { num: number; str: string; [num]: 0; [sym]: symbol; }
->{ num: 0, str: 's', [num]: num as 0, [sym]: sym } : { num: number; str: string; [num]: 0; [sym]: symbol; }
+>obj : { [num]: 0; num: number; str: string; [sym]: symbol; }
+>{ num: 0, str: 's', [num]: num as 0, [sym]: sym } : { [num]: 0; num: number; str: string; [sym]: symbol; }
 >num : number
 >0 : 0
 >str : string
@@ -45,7 +45,7 @@ const val = set(obj, 'str', '');
 >val : string
 >set(obj, 'str', '') : string
 >set : <T extends object, K extends keyof T>(obj: T, key: K, value: T[K]) => T[K]
->obj : { num: number; str: string; [num]: 0; [sym]: symbol; }
+>obj : { [num]: 0; num: number; str: string; [sym]: symbol; }
 >'str' : "str"
 >'' : ""
 
@@ -54,7 +54,7 @@ const valB = set(obj, 'num', '');
 >valB : number
 >set(obj, 'num', '') : number
 >set : <T extends object, K extends keyof T>(obj: T, key: K, value: T[K]) => T[K]
->obj : { num: number; str: string; [num]: 0; [sym]: symbol; }
+>obj : { [num]: 0; num: number; str: string; [sym]: symbol; }
 >'num' : "num"
 >'' : ""
 
@@ -64,7 +64,7 @@ const valC = set(obj, sym, sym);
 >valC : symbol
 >set(obj, sym, sym) : symbol
 >set : <T extends object, K extends keyof T>(obj: T, key: K, value: T[K]) => T[K]
->obj : { num: number; str: string; [num]: 0; [sym]: symbol; }
+>obj : { [num]: 0; num: number; str: string; [sym]: symbol; }
 >sym : unique symbol
 >sym : unique symbol
 
@@ -74,7 +74,7 @@ const valD = set(obj, num, num);
 >valD : 0
 >set(obj, num, num) : 0
 >set : <T extends object, K extends keyof T>(obj: T, key: K, value: T[K]) => T[K]
->obj : { num: number; str: string; [num]: 0; [sym]: symbol; }
+>obj : { [num]: 0; num: number; str: string; [sym]: symbol; }
 >num : 0
 >num : 0
 
diff --git a/testdata/baselines/reference/submodule/compiler/keyofDoesntContainSymbols.types.diff b/testdata/baselines/reference/submodule/compiler/keyofDoesntContainSymbols.types.diff
index 5d8956e901..4463da8ebf 100644
--- a/testdata/baselines/reference/submodule/compiler/keyofDoesntContainSymbols.types.diff
+++ b/testdata/baselines/reference/submodule/compiler/keyofDoesntContainSymbols.types.diff
@@ -6,8 +6,8 @@
  const obj = { num: 0, str: 's', [num]: num as 0, [sym]: sym };
 ->obj : { num: number; str: string; 0: 0; [sym]: symbol; }
 ->{ num: 0, str: 's', [num]: num as 0, [sym]: sym } : { num: number; str: string; 0: 0; [sym]: symbol; }
-+>obj : { num: number; str: string; [num]: 0; [sym]: symbol; }
-+>{ num: 0, str: 's', [num]: num as 0, [sym]: sym } : { num: number; str: string; [num]: 0; [sym]: symbol; }
++>obj : { [num]: 0; num: number; str: string; [sym]: symbol; }
++>{ num: 0, str: 's', [num]: num as 0, [sym]: sym } : { [num]: 0; num: number; str: string; [sym]: symbol; }
  >num : number
  >0 : 0
  >str : string
@@ -25,7 +25,7 @@
  >set(obj, 'str', '') : string
  >set : <T extends object, K extends keyof T>(obj: T, key: K, value: T[K]) => T[K]
 ->obj : { num: number; str: string; 0: 0; [sym]: symbol; }
-+>obj : { num: number; str: string; [num]: 0; [sym]: symbol; }
++>obj : { [num]: 0; num: number; str: string; [sym]: symbol; }
  >'str' : "str"
  >'' : ""
  
@@ -34,7 +34,7 @@
  >set(obj, 'num', '') : number
  >set : <T extends object, K extends keyof T>(obj: T, key: K, value: T[K]) => T[K]
 ->obj : { num: number; str: string; 0: 0; [sym]: symbol; }
-+>obj : { num: number; str: string; [num]: 0; [sym]: symbol; }
++>obj : { [num]: 0; num: number; str: string; [sym]: symbol; }
  >'num' : "num"
  >'' : ""
  
@@ -43,7 +43,7 @@
  >set(obj, sym, sym) : symbol
  >set : <T extends object, K extends keyof T>(obj: T, key: K, value: T[K]) => T[K]
 ->obj : { num: number; str: string; 0: 0; [sym]: symbol; }
-+>obj : { num: number; str: string; [num]: 0; [sym]: symbol; }
++>obj : { [num]: 0; num: number; str: string; [sym]: symbol; }
  >sym : unique symbol
  >sym : unique symbol
  
@@ -52,7 +52,7 @@
  >set(obj, num, num) : 0
  >set : <T extends object, K extends keyof T>(obj: T, key: K, value: T[K]) => T[K]
 ->obj : { num: number; str: string; 0: 0; [sym]: symbol; }
-+>obj : { num: number; str: string; [num]: 0; [sym]: symbol; }
++>obj : { [num]: 0; num: number; str: string; [sym]: symbol; }
  >num : 0
  >num : 0
  
diff --git a/testdata/baselines/reference/submodule/compiler/mappedTypeIndexedAccessConstraint.types b/testdata/baselines/reference/submodule/compiler/mappedTypeIndexedAccessConstraint.types
index 499eccb647..96a1e6018a 100644
--- a/testdata/baselines/reference/submodule/compiler/mappedTypeIndexedAccessConstraint.types
+++ b/testdata/baselines/reference/submodule/compiler/mappedTypeIndexedAccessConstraint.types
@@ -134,10 +134,10 @@ type PartMappings = SetOptional<Mappings, "foo">;
 >PartMappings : PartMappings
 
 const mapper: { [K in keyof PartMappings]: (o: MapperArgs<K>) => PartMappings[K] } = {
->mapper : { foo?: (o: MapperArgs<"foo">) => boolean | undefined | undefined; 12: (o: MapperArgs<"12">) => number; 42: (o: MapperArgs<42>) => string; }
+>mapper : { 12: (o: MapperArgs<"12">) => number; 42: (o: MapperArgs<42>) => string; foo?: (o: MapperArgs<"foo">) => boolean | undefined | undefined; }
 >K : K
 >o : MapperArgs<K>
->{    foo: ({ v, i }) => v.length + i > 4,    "12": ({ v, i }) => Number(v) + i,    42: ({ v, i }) => `${v}${i}`,} : { foo: (__0: MapperArgs<"foo">) => boolean; "12": (__0: MapperArgs<"12">) => number; 42: (__0: MapperArgs<42>) => string; }
+>{    foo: ({ v, i }) => v.length + i > 4,    "12": ({ v, i }) => Number(v) + i,    42: ({ v, i }) => `${v}${i}`,} : { "12": (__0: MapperArgs<"12">) => number; 42: (__0: MapperArgs<42>) => string; foo: (__0: MapperArgs<"foo">) => boolean; }
 
     foo: ({ v, i }) => v.length + i > 4,
 >foo : (__0: MapperArgs<"foo">) => boolean
@@ -183,7 +183,7 @@ const resolveMapper1 = <K extends keyof typeof mapper>(
 >o : MapperArgs<K>
 >mapper[key](o) : PartMappings[K]
 >mapper[key] : (o: MapperArgs<K>) => PartMappings[K] | undefined
->mapper : { foo?: (o: MapperArgs<"foo">) => boolean | undefined | undefined; 12: (o: MapperArgs<"12">) => number; 42: (o: MapperArgs<42>) => string; }
+>mapper : { 12: (o: MapperArgs<"12">) => number; 42: (o: MapperArgs<42>) => string; foo?: (o: MapperArgs<"foo">) => boolean | undefined | undefined; }
 >key : K
 >o : MapperArgs<K>
 
@@ -197,7 +197,7 @@ const resolveMapper2 = <K extends keyof typeof mapper>(
 >o : MapperArgs<K>
 >mapper[key]?.(o) : PartMappings[K] | undefined
 >mapper[key] : (o: MapperArgs<K>) => PartMappings[K] | undefined
->mapper : { foo?: (o: MapperArgs<"foo">) => boolean | undefined | undefined; 12: (o: MapperArgs<"12">) => number; 42: (o: MapperArgs<42>) => string; }
+>mapper : { 12: (o: MapperArgs<"12">) => number; 42: (o: MapperArgs<42>) => string; foo?: (o: MapperArgs<"foo">) => boolean | undefined | undefined; }
 >key : K
 >o : MapperArgs<K>
 
diff --git a/testdata/baselines/reference/submodule/compiler/mappedTypeIndexedAccessConstraint.types.diff b/testdata/baselines/reference/submodule/compiler/mappedTypeIndexedAccessConstraint.types.diff
index 670832dc7e..05a97bb929 100644
--- a/testdata/baselines/reference/submodule/compiler/mappedTypeIndexedAccessConstraint.types.diff
+++ b/testdata/baselines/reference/submodule/compiler/mappedTypeIndexedAccessConstraint.types.diff
@@ -137,11 +137,11 @@
  
  const mapper: { [K in keyof PartMappings]: (o: MapperArgs<K>) => PartMappings[K] } = {
 ->mapper : { "12": (o: MapperArgs<"12">) => number; 42: (o: MapperArgs<42>) => string; foo?: ((o: MapperArgs<"foo">) => boolean | undefined) | undefined; }
-+>mapper : { foo?: (o: MapperArgs<"foo">) => boolean | undefined | undefined; 12: (o: MapperArgs<"12">) => number; 42: (o: MapperArgs<42>) => string; }
++>mapper : { 12: (o: MapperArgs<"12">) => number; 42: (o: MapperArgs<42>) => string; foo?: (o: MapperArgs<"foo">) => boolean | undefined | undefined; }
 +>K : K
  >o : MapperArgs<K>
 ->{    foo: ({ v, i }) => v.length + i > 4,    "12": ({ v, i }) => Number(v) + i,    42: ({ v, i }) => `${v}${i}`,} : { foo: ({ v, i }: MapperArgs<"foo">) => boolean; "12": ({ v, i }: MapperArgs<"12">) => number; 42: ({ v, i }: MapperArgs<42>) => string; }
-+>{    foo: ({ v, i }) => v.length + i > 4,    "12": ({ v, i }) => Number(v) + i,    42: ({ v, i }) => `${v}${i}`,} : { foo: (__0: MapperArgs<"foo">) => boolean; "12": (__0: MapperArgs<"12">) => number; 42: (__0: MapperArgs<42>) => string; }
++>{    foo: ({ v, i }) => v.length + i > 4,    "12": ({ v, i }) => Number(v) + i,    42: ({ v, i }) => `${v}${i}`,} : { "12": (__0: MapperArgs<"12">) => number; 42: (__0: MapperArgs<42>) => string; foo: (__0: MapperArgs<"foo">) => boolean; }
  
      foo: ({ v, i }) => v.length + i > 4,
 ->foo : ({ v, i }: MapperArgs<"foo">) => boolean
@@ -191,7 +191,7 @@
 ->mapper[key] : ((o: MapperArgs<K>) => PartMappings[K]) | undefined
 ->mapper : { "12": (o: MapperArgs<"12">) => number; 42: (o: MapperArgs<42>) => string; foo?: ((o: MapperArgs<"foo">) => boolean | undefined) | undefined; }
 +>mapper[key] : (o: MapperArgs<K>) => PartMappings[K] | undefined
-+>mapper : { foo?: (o: MapperArgs<"foo">) => boolean | undefined | undefined; 12: (o: MapperArgs<"12">) => number; 42: (o: MapperArgs<42>) => string; }
++>mapper : { 12: (o: MapperArgs<"12">) => number; 42: (o: MapperArgs<42>) => string; foo?: (o: MapperArgs<"foo">) => boolean | undefined | undefined; }
  >key : K
  >o : MapperArgs<K>
  
@@ -210,7 +210,7 @@
 ->mapper[key] : ((o: MapperArgs<K>) => PartMappings[K]) | undefined
 ->mapper : { "12": (o: MapperArgs<"12">) => number; 42: (o: MapperArgs<42>) => string; foo?: ((o: MapperArgs<"foo">) => boolean | undefined) | undefined; }
 +>mapper[key] : (o: MapperArgs<K>) => PartMappings[K] | undefined
-+>mapper : { foo?: (o: MapperArgs<"foo">) => boolean | undefined | undefined; 12: (o: MapperArgs<"12">) => number; 42: (o: MapperArgs<42>) => string; }
++>mapper : { 12: (o: MapperArgs<"12">) => number; 42: (o: MapperArgs<42>) => string; foo?: (o: MapperArgs<"foo">) => boolean | undefined | undefined; }
  >key : K
  >o : MapperArgs<K>
  
diff --git a/testdata/baselines/reference/submodule/compiler/normalizedIntersectionTooComplex.types b/testdata/baselines/reference/submodule/compiler/normalizedIntersectionTooComplex.types
index c3aa2b1dca..86d65521e2 100644
--- a/testdata/baselines/reference/submodule/compiler/normalizedIntersectionTooComplex.types
+++ b/testdata/baselines/reference/submodule/compiler/normalizedIntersectionTooComplex.types
@@ -33,112 +33,112 @@ interface Big {
 >Big : Big
 
     "0": { common?: string; "0"?: number, ref?: Obj<Big["0"]> | Func<Big["0"]>; }
->"0" : { common?: string | undefined; "0"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; }
+>"0" : { "0"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; }
 >common : string | undefined
 >"0" : number | undefined
->ref : Func<{ common?: string | undefined; "0"?: number | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ common?: string | undefined; "0"?: number | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
+>ref : Func<{ "0"?: number | undefined; common?: string | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ "0"?: number | undefined; common?: string | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
 
     "1": { common?: string; "1"?: number, ref?: Obj<Big["1"]> | Func<Big["1"]>; }
->"1" : { common?: string | undefined; "1"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; }
+>"1" : { "1"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; }
 >common : string | undefined
 >"1" : number | undefined
->ref : Func<{ common?: string | undefined; "1"?: number | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ common?: string | undefined; "1"?: number | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
+>ref : Func<{ "1"?: number | undefined; common?: string | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ "1"?: number | undefined; common?: string | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
 
     "2": { common?: string; "2"?: number, ref?: Obj<Big["2"]> | Func<Big["2"]>; }
->"2" : { common?: string | undefined; "2"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; }
+>"2" : { "2"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; }
 >common : string | undefined
 >"2" : number | undefined
->ref : Func<{ common?: string | undefined; "2"?: number | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ common?: string | undefined; "2"?: number | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
+>ref : Func<{ "2"?: number | undefined; common?: string | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ "2"?: number | undefined; common?: string | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
 
     "3": { common?: string; "3"?: number, ref?: Obj<Big["3"]> | Func<Big["3"]>; }
->"3" : { common?: string | undefined; "3"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; }
+>"3" : { "3"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; }
 >common : string | undefined
 >"3" : number | undefined
->ref : Func<{ common?: string | undefined; "3"?: number | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ common?: string | undefined; "3"?: number | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
+>ref : Func<{ "3"?: number | undefined; common?: string | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ "3"?: number | undefined; common?: string | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
 
     "4": { common?: string; "4"?: number, ref?: Obj<Big["4"]> | Func<Big["4"]>; }
->"4" : { common?: string | undefined; "4"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; }
+>"4" : { "4"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; }
 >common : string | undefined
 >"4" : number | undefined
->ref : Func<{ common?: string | undefined; "4"?: number | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ common?: string | undefined; "4"?: number | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
+>ref : Func<{ "4"?: number | undefined; common?: string | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ "4"?: number | undefined; common?: string | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
 
     "5": { common?: string; "5"?: number, ref?: Obj<Big["5"]> | Func<Big["5"]>; }
->"5" : { common?: string | undefined; "5"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; }
+>"5" : { "5"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; }
 >common : string | undefined
 >"5" : number | undefined
->ref : Func<{ common?: string | undefined; "5"?: number | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ common?: string | undefined; "5"?: number | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
+>ref : Func<{ "5"?: number | undefined; common?: string | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ "5"?: number | undefined; common?: string | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
 
     "6": { common?: string; "6"?: number, ref?: Obj<Big["6"]> | Func<Big["6"]>; }
->"6" : { common?: string | undefined; "6"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; }
+>"6" : { "6"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; }
 >common : string | undefined
 >"6" : number | undefined
->ref : Func<{ common?: string | undefined; "6"?: number | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ common?: string | undefined; "6"?: number | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
+>ref : Func<{ "6"?: number | undefined; common?: string | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ "6"?: number | undefined; common?: string | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
 
     "7": { common?: string; "7"?: number, ref?: Obj<Big["7"]> | Func<Big["7"]>; }
->"7" : { common?: string | undefined; "7"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; }
+>"7" : { "7"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; }
 >common : string | undefined
 >"7" : number | undefined
->ref : Func<{ common?: string | undefined; "7"?: number | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ common?: string | undefined; "7"?: number | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
+>ref : Func<{ "7"?: number | undefined; common?: string | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ "7"?: number | undefined; common?: string | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
 
     "8": { common?: string; "8"?: number, ref?: Obj<Big["8"]> | Func<Big["8"]>; }
->"8" : { common?: string | undefined; "8"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; }
+>"8" : { "8"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; }
 >common : string | undefined
 >"8" : number | undefined
->ref : Func<{ common?: string | undefined; "8"?: number | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ common?: string | undefined; "8"?: number | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
+>ref : Func<{ "8"?: number | undefined; common?: string | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ "8"?: number | undefined; common?: string | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
 
     "9": { common?: string; "9"?: number, ref?: Obj<Big["9"]> | Func<Big["9"]>; }
->"9" : { common?: string | undefined; "9"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; }
+>"9" : { "9"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; }
 >common : string | undefined
 >"9" : number | undefined
->ref : Func<{ common?: string | undefined; "9"?: number | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ common?: string | undefined; "9"?: number | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
+>ref : Func<{ "9"?: number | undefined; common?: string | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ "9"?: number | undefined; common?: string | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
 
     "10": { common?: string; "10"?: number, ref?: Obj<Big["10"]> | Func<Big["10"]>; }
->"10" : { common?: string | undefined; "10"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; }
+>"10" : { "10"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; }
 >common : string | undefined
 >"10" : number | undefined
->ref : Func<{ common?: string | undefined; "10"?: number | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ common?: string | undefined; "10"?: number | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
+>ref : Func<{ "10"?: number | undefined; common?: string | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ "10"?: number | undefined; common?: string | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
 
     "11": { common?: string; "11"?: number, ref?: Obj<Big["11"]> | Func<Big["11"]>; }
->"11" : { common?: string | undefined; "11"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; }
+>"11" : { "11"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; }
 >common : string | undefined
 >"11" : number | undefined
->ref : Func<{ common?: string | undefined; "11"?: number | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ common?: string | undefined; "11"?: number | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
+>ref : Func<{ "11"?: number | undefined; common?: string | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ "11"?: number | undefined; common?: string | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
 
     "12": { common?: string; "12"?: number, ref?: Obj<Big["12"]> | Func<Big["12"]>; }
->"12" : { common?: string | undefined; "12"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; }
+>"12" : { "12"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; }
 >common : string | undefined
 >"12" : number | undefined
->ref : Func<{ common?: string | undefined; "12"?: number | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ common?: string | undefined; "12"?: number | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
+>ref : Func<{ "12"?: number | undefined; common?: string | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ "12"?: number | undefined; common?: string | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
 
     "13": { common?: string; "13"?: number, ref?: Obj<Big["13"]> | Func<Big["13"]>; }
->"13" : { common?: string | undefined; "13"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; }
+>"13" : { "13"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; }
 >common : string | undefined
 >"13" : number | undefined
->ref : Func<{ common?: string | undefined; "13"?: number | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ common?: string | undefined; "13"?: number | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
+>ref : Func<{ "13"?: number | undefined; common?: string | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ "13"?: number | undefined; common?: string | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
 
     "14": { common?: string; "14"?: number, ref?: Obj<Big["14"]> | Func<Big["14"]>; }
->"14" : { common?: string | undefined; "14"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; }
+>"14" : { "14"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; }
 >common : string | undefined
 >"14" : number | undefined
->ref : Func<{ common?: string | undefined; "14"?: number | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ common?: string | undefined; "14"?: number | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
+>ref : Func<{ "14"?: number | undefined; common?: string | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ "14"?: number | undefined; common?: string | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
 
     "15": { common?: string; "15"?: number, ref?: Obj<Big["15"]> | Func<Big["15"]>; }
->"15" : { common?: string | undefined; "15"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; }
+>"15" : { "15"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; }
 >common : string | undefined
 >"15" : number | undefined
->ref : Func<{ common?: string | undefined; "15"?: number | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ common?: string | undefined; "15"?: number | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
+>ref : Func<{ "15"?: number | undefined; common?: string | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ "15"?: number | undefined; common?: string | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
 
     "16": { common?: string; "16"?: number, ref?: Obj<Big["16"]> | Func<Big["16"]>; }
->"16" : { common?: string | undefined; "16"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; }
+>"16" : { "16"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; }
 >common : string | undefined
 >"16" : number | undefined
->ref : Func<{ common?: string | undefined; "16"?: number | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ common?: string | undefined; "16"?: number | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
+>ref : Func<{ "16"?: number | undefined; common?: string | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ "16"?: number | undefined; common?: string | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
 
     "17": { common?: string; "17"?: number, ref?: Obj<Big["17"]> | Func<Big["17"]>; }
->"17" : { common?: string | undefined; "17"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; }
+>"17" : { "17"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; }
 >common : string | undefined
 >"17" : number | undefined
->ref : Func<{ common?: string | undefined; "17"?: number | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ common?: string | undefined; "17"?: number | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
+>ref : Func<{ "17"?: number | undefined; common?: string | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ "17"?: number | undefined; common?: string | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
 }
 declare function getCtor<T extends keyof Big>(comp: T): CtorOf<Big[T]>
 >getCtor : <T extends keyof Big>(comp: T) => CtorOf<Big[T]>
@@ -149,15 +149,15 @@ declare var all: keyof Big;
 >all : keyof Big
 
 const ctor = getCtor(all);
->ctor : CtorOf<{ common?: string | undefined; "0"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "1"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "2"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "3"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "4"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "5"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "6"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "7"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "8"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "9"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "10"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "11"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "12"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "13"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "14"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "15"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "16"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "17"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; }>
->getCtor(all) : CtorOf<{ common?: string | undefined; "0"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "1"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "2"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "3"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "4"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "5"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "6"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "7"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "8"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "9"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "10"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "11"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "12"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "13"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "14"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "15"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "16"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "17"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; }>
+>ctor : CtorOf<{ "0"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "1"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "2"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "3"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "4"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "5"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "6"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "7"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "8"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "9"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "10"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "11"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "12"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "13"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "14"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "15"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "16"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "17"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; }>
+>getCtor(all) : CtorOf<{ "0"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "1"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "2"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "3"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "4"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "5"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "6"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "7"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "8"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "9"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "10"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "11"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "12"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "13"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "14"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "15"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "16"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "17"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; }>
 >getCtor : <T extends keyof Big>(comp: T) => CtorOf<Big[T]>
 >all : keyof Big
 
 const comp = ctor({ common: "ok", ref: x => console.log(x) });
->comp : { common?: string | undefined; "0"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "1"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "2"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "3"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "4"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "5"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "6"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "7"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "8"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "9"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "10"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "11"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "12"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "13"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "14"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "15"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "16"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "17"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; }
->ctor({ common: "ok", ref: x => console.log(x) }) : { common?: string | undefined; "0"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "1"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "2"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "3"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "4"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "5"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "6"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "7"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "8"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "9"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "10"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "11"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "12"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "13"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "14"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "15"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "16"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "17"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; }
->ctor : CtorOf<{ common?: string | undefined; "0"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "1"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "2"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "3"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "4"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "5"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "6"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "7"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "8"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "9"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "10"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "11"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "12"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "13"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "14"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "15"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "16"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "17"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; }>
+>comp : { "0"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "1"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "2"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "3"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "4"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "5"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "6"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "7"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "8"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "9"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "10"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "11"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "12"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "13"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "14"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "15"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "16"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "17"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; }
+>ctor({ common: "ok", ref: x => console.log(x) }) : { "0"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "1"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "2"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "3"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "4"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "5"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "6"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "7"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "8"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "9"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "10"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "11"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "12"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "13"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "14"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "15"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "16"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "17"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; }
+>ctor : CtorOf<{ "0"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "1"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "2"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "3"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "4"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "5"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "6"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "7"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "8"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "9"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "10"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "11"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "12"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "13"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "14"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "15"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "16"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "17"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; }>
 >{ common: "ok", ref: x => console.log(x) } : { common: string; ref: (x: any) => void; }
 >common : string
 >"ok" : "ok"
diff --git a/testdata/baselines/reference/submodule/compiler/normalizedIntersectionTooComplex.types.diff b/testdata/baselines/reference/submodule/compiler/normalizedIntersectionTooComplex.types.diff
index 45da8ce9f5..648b50ae5a 100644
--- a/testdata/baselines/reference/submodule/compiler/normalizedIntersectionTooComplex.types.diff
+++ b/testdata/baselines/reference/submodule/compiler/normalizedIntersectionTooComplex.types.diff
@@ -40,147 +40,147 @@
 +
      "0": { common?: string; "0"?: number, ref?: Obj<Big["0"]> | Func<Big["0"]>; }
 ->"0" : { common?: string; "0"?: number; ref?: Obj<Big["0"]> | Func<Big["0"]>; }
-+>"0" : { common?: string | undefined; "0"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; }
++>"0" : { "0"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; }
  >common : string | undefined
  >"0" : number | undefined
 ->ref : Obj<{ common?: string; "0"?: number; ref?: Obj<Big["0"]> | Func<Big["0"]>; }> | Func<{ common?: string; "0"?: number; ref?: Obj<Big["0"]> | Func<Big["0"]>; }> | undefined
-+>ref : Func<{ common?: string | undefined; "0"?: number | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ common?: string | undefined; "0"?: number | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
++>ref : Func<{ "0"?: number | undefined; common?: string | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ "0"?: number | undefined; common?: string | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
  
      "1": { common?: string; "1"?: number, ref?: Obj<Big["1"]> | Func<Big["1"]>; }
 ->"1" : { common?: string; "1"?: number; ref?: Obj<Big["1"]> | Func<Big["1"]>; }
-+>"1" : { common?: string | undefined; "1"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; }
++>"1" : { "1"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; }
  >common : string | undefined
  >"1" : number | undefined
 ->ref : Obj<{ common?: string; "1"?: number; ref?: Obj<Big["1"]> | Func<Big["1"]>; }> | Func<{ common?: string; "1"?: number; ref?: Obj<Big["1"]> | Func<Big["1"]>; }> | undefined
-+>ref : Func<{ common?: string | undefined; "1"?: number | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ common?: string | undefined; "1"?: number | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
++>ref : Func<{ "1"?: number | undefined; common?: string | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ "1"?: number | undefined; common?: string | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
  
      "2": { common?: string; "2"?: number, ref?: Obj<Big["2"]> | Func<Big["2"]>; }
 ->"2" : { common?: string; "2"?: number; ref?: Obj<Big["2"]> | Func<Big["2"]>; }
-+>"2" : { common?: string | undefined; "2"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; }
++>"2" : { "2"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; }
  >common : string | undefined
  >"2" : number | undefined
 ->ref : Obj<{ common?: string; "2"?: number; ref?: Obj<Big["2"]> | Func<Big["2"]>; }> | Func<{ common?: string; "2"?: number; ref?: Obj<Big["2"]> | Func<Big["2"]>; }> | undefined
-+>ref : Func<{ common?: string | undefined; "2"?: number | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ common?: string | undefined; "2"?: number | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
++>ref : Func<{ "2"?: number | undefined; common?: string | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ "2"?: number | undefined; common?: string | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
  
      "3": { common?: string; "3"?: number, ref?: Obj<Big["3"]> | Func<Big["3"]>; }
 ->"3" : { common?: string; "3"?: number; ref?: Obj<Big["3"]> | Func<Big["3"]>; }
-+>"3" : { common?: string | undefined; "3"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; }
++>"3" : { "3"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; }
  >common : string | undefined
  >"3" : number | undefined
 ->ref : Obj<{ common?: string; "3"?: number; ref?: Obj<Big["3"]> | Func<Big["3"]>; }> | Func<{ common?: string; "3"?: number; ref?: Obj<Big["3"]> | Func<Big["3"]>; }> | undefined
-+>ref : Func<{ common?: string | undefined; "3"?: number | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ common?: string | undefined; "3"?: number | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
++>ref : Func<{ "3"?: number | undefined; common?: string | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ "3"?: number | undefined; common?: string | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
  
      "4": { common?: string; "4"?: number, ref?: Obj<Big["4"]> | Func<Big["4"]>; }
 ->"4" : { common?: string; "4"?: number; ref?: Obj<Big["4"]> | Func<Big["4"]>; }
-+>"4" : { common?: string | undefined; "4"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; }
++>"4" : { "4"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; }
  >common : string | undefined
  >"4" : number | undefined
 ->ref : Obj<{ common?: string; "4"?: number; ref?: Obj<Big["4"]> | Func<Big["4"]>; }> | Func<{ common?: string; "4"?: number; ref?: Obj<Big["4"]> | Func<Big["4"]>; }> | undefined
-+>ref : Func<{ common?: string | undefined; "4"?: number | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ common?: string | undefined; "4"?: number | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
++>ref : Func<{ "4"?: number | undefined; common?: string | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ "4"?: number | undefined; common?: string | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
  
      "5": { common?: string; "5"?: number, ref?: Obj<Big["5"]> | Func<Big["5"]>; }
 ->"5" : { common?: string; "5"?: number; ref?: Obj<Big["5"]> | Func<Big["5"]>; }
-+>"5" : { common?: string | undefined; "5"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; }
++>"5" : { "5"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; }
  >common : string | undefined
  >"5" : number | undefined
 ->ref : Obj<{ common?: string; "5"?: number; ref?: Obj<Big["5"]> | Func<Big["5"]>; }> | Func<{ common?: string; "5"?: number; ref?: Obj<Big["5"]> | Func<Big["5"]>; }> | undefined
-+>ref : Func<{ common?: string | undefined; "5"?: number | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ common?: string | undefined; "5"?: number | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
++>ref : Func<{ "5"?: number | undefined; common?: string | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ "5"?: number | undefined; common?: string | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
  
      "6": { common?: string; "6"?: number, ref?: Obj<Big["6"]> | Func<Big["6"]>; }
 ->"6" : { common?: string; "6"?: number; ref?: Obj<Big["6"]> | Func<Big["6"]>; }
-+>"6" : { common?: string | undefined; "6"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; }
++>"6" : { "6"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; }
  >common : string | undefined
  >"6" : number | undefined
 ->ref : Obj<{ common?: string; "6"?: number; ref?: Obj<Big["6"]> | Func<Big["6"]>; }> | Func<{ common?: string; "6"?: number; ref?: Obj<Big["6"]> | Func<Big["6"]>; }> | undefined
-+>ref : Func<{ common?: string | undefined; "6"?: number | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ common?: string | undefined; "6"?: number | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
++>ref : Func<{ "6"?: number | undefined; common?: string | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ "6"?: number | undefined; common?: string | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
  
      "7": { common?: string; "7"?: number, ref?: Obj<Big["7"]> | Func<Big["7"]>; }
 ->"7" : { common?: string; "7"?: number; ref?: Obj<Big["7"]> | Func<Big["7"]>; }
-+>"7" : { common?: string | undefined; "7"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; }
++>"7" : { "7"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; }
  >common : string | undefined
  >"7" : number | undefined
 ->ref : Obj<{ common?: string; "7"?: number; ref?: Obj<Big["7"]> | Func<Big["7"]>; }> | Func<{ common?: string; "7"?: number; ref?: Obj<Big["7"]> | Func<Big["7"]>; }> | undefined
-+>ref : Func<{ common?: string | undefined; "7"?: number | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ common?: string | undefined; "7"?: number | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
++>ref : Func<{ "7"?: number | undefined; common?: string | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ "7"?: number | undefined; common?: string | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
  
      "8": { common?: string; "8"?: number, ref?: Obj<Big["8"]> | Func<Big["8"]>; }
 ->"8" : { common?: string; "8"?: number; ref?: Obj<Big["8"]> | Func<Big["8"]>; }
-+>"8" : { common?: string | undefined; "8"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; }
++>"8" : { "8"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; }
  >common : string | undefined
  >"8" : number | undefined
 ->ref : Obj<{ common?: string; "8"?: number; ref?: Obj<Big["8"]> | Func<Big["8"]>; }> | Func<{ common?: string; "8"?: number; ref?: Obj<Big["8"]> | Func<Big["8"]>; }> | undefined
-+>ref : Func<{ common?: string | undefined; "8"?: number | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ common?: string | undefined; "8"?: number | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
++>ref : Func<{ "8"?: number | undefined; common?: string | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ "8"?: number | undefined; common?: string | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
  
      "9": { common?: string; "9"?: number, ref?: Obj<Big["9"]> | Func<Big["9"]>; }
 ->"9" : { common?: string; "9"?: number; ref?: Obj<Big["9"]> | Func<Big["9"]>; }
-+>"9" : { common?: string | undefined; "9"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; }
++>"9" : { "9"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; }
  >common : string | undefined
  >"9" : number | undefined
 ->ref : Obj<{ common?: string; "9"?: number; ref?: Obj<Big["9"]> | Func<Big["9"]>; }> | Func<{ common?: string; "9"?: number; ref?: Obj<Big["9"]> | Func<Big["9"]>; }> | undefined
-+>ref : Func<{ common?: string | undefined; "9"?: number | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ common?: string | undefined; "9"?: number | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
++>ref : Func<{ "9"?: number | undefined; common?: string | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ "9"?: number | undefined; common?: string | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
  
      "10": { common?: string; "10"?: number, ref?: Obj<Big["10"]> | Func<Big["10"]>; }
 ->"10" : { common?: string; "10"?: number; ref?: Obj<Big["10"]> | Func<Big["10"]>; }
-+>"10" : { common?: string | undefined; "10"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; }
++>"10" : { "10"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; }
  >common : string | undefined
  >"10" : number | undefined
 ->ref : Obj<{ common?: string; "10"?: number; ref?: Obj<Big["10"]> | Func<Big["10"]>; }> | Func<{ common?: string; "10"?: number; ref?: Obj<Big["10"]> | Func<Big["10"]>; }> | undefined
-+>ref : Func<{ common?: string | undefined; "10"?: number | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ common?: string | undefined; "10"?: number | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
++>ref : Func<{ "10"?: number | undefined; common?: string | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ "10"?: number | undefined; common?: string | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
  
      "11": { common?: string; "11"?: number, ref?: Obj<Big["11"]> | Func<Big["11"]>; }
 ->"11" : { common?: string; "11"?: number; ref?: Obj<Big["11"]> | Func<Big["11"]>; }
-+>"11" : { common?: string | undefined; "11"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; }
++>"11" : { "11"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; }
  >common : string | undefined
  >"11" : number | undefined
 ->ref : Obj<{ common?: string; "11"?: number; ref?: Obj<Big["11"]> | Func<Big["11"]>; }> | Func<{ common?: string; "11"?: number; ref?: Obj<Big["11"]> | Func<Big["11"]>; }> | undefined
-+>ref : Func<{ common?: string | undefined; "11"?: number | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ common?: string | undefined; "11"?: number | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
++>ref : Func<{ "11"?: number | undefined; common?: string | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ "11"?: number | undefined; common?: string | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
  
      "12": { common?: string; "12"?: number, ref?: Obj<Big["12"]> | Func<Big["12"]>; }
 ->"12" : { common?: string; "12"?: number; ref?: Obj<Big["12"]> | Func<Big["12"]>; }
-+>"12" : { common?: string | undefined; "12"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; }
++>"12" : { "12"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; }
  >common : string | undefined
  >"12" : number | undefined
 ->ref : Obj<{ common?: string; "12"?: number; ref?: Obj<Big["12"]> | Func<Big["12"]>; }> | Func<{ common?: string; "12"?: number; ref?: Obj<Big["12"]> | Func<Big["12"]>; }> | undefined
-+>ref : Func<{ common?: string | undefined; "12"?: number | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ common?: string | undefined; "12"?: number | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
++>ref : Func<{ "12"?: number | undefined; common?: string | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ "12"?: number | undefined; common?: string | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
  
      "13": { common?: string; "13"?: number, ref?: Obj<Big["13"]> | Func<Big["13"]>; }
 ->"13" : { common?: string; "13"?: number; ref?: Obj<Big["13"]> | Func<Big["13"]>; }
-+>"13" : { common?: string | undefined; "13"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; }
++>"13" : { "13"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; }
  >common : string | undefined
  >"13" : number | undefined
 ->ref : Obj<{ common?: string; "13"?: number; ref?: Obj<Big["13"]> | Func<Big["13"]>; }> | Func<{ common?: string; "13"?: number; ref?: Obj<Big["13"]> | Func<Big["13"]>; }> | undefined
-+>ref : Func<{ common?: string | undefined; "13"?: number | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ common?: string | undefined; "13"?: number | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
++>ref : Func<{ "13"?: number | undefined; common?: string | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ "13"?: number | undefined; common?: string | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
  
      "14": { common?: string; "14"?: number, ref?: Obj<Big["14"]> | Func<Big["14"]>; }
 ->"14" : { common?: string; "14"?: number; ref?: Obj<Big["14"]> | Func<Big["14"]>; }
-+>"14" : { common?: string | undefined; "14"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; }
++>"14" : { "14"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; }
  >common : string | undefined
  >"14" : number | undefined
 ->ref : Obj<{ common?: string; "14"?: number; ref?: Obj<Big["14"]> | Func<Big["14"]>; }> | Func<{ common?: string; "14"?: number; ref?: Obj<Big["14"]> | Func<Big["14"]>; }> | undefined
-+>ref : Func<{ common?: string | undefined; "14"?: number | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ common?: string | undefined; "14"?: number | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
++>ref : Func<{ "14"?: number | undefined; common?: string | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ "14"?: number | undefined; common?: string | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
  
      "15": { common?: string; "15"?: number, ref?: Obj<Big["15"]> | Func<Big["15"]>; }
 ->"15" : { common?: string; "15"?: number; ref?: Obj<Big["15"]> | Func<Big["15"]>; }
-+>"15" : { common?: string | undefined; "15"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; }
++>"15" : { "15"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; }
  >common : string | undefined
  >"15" : number | undefined
 ->ref : Obj<{ common?: string; "15"?: number; ref?: Obj<Big["15"]> | Func<Big["15"]>; }> | Func<{ common?: string; "15"?: number; ref?: Obj<Big["15"]> | Func<Big["15"]>; }> | undefined
-+>ref : Func<{ common?: string | undefined; "15"?: number | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ common?: string | undefined; "15"?: number | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
++>ref : Func<{ "15"?: number | undefined; common?: string | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ "15"?: number | undefined; common?: string | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
  
      "16": { common?: string; "16"?: number, ref?: Obj<Big["16"]> | Func<Big["16"]>; }
 ->"16" : { common?: string; "16"?: number; ref?: Obj<Big["16"]> | Func<Big["16"]>; }
-+>"16" : { common?: string | undefined; "16"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; }
++>"16" : { "16"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; }
  >common : string | undefined
  >"16" : number | undefined
 ->ref : Obj<{ common?: string; "16"?: number; ref?: Obj<Big["16"]> | Func<Big["16"]>; }> | Func<{ common?: string; "16"?: number; ref?: Obj<Big["16"]> | Func<Big["16"]>; }> | undefined
-+>ref : Func<{ common?: string | undefined; "16"?: number | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ common?: string | undefined; "16"?: number | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
++>ref : Func<{ "16"?: number | undefined; common?: string | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ "16"?: number | undefined; common?: string | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
  
      "17": { common?: string; "17"?: number, ref?: Obj<Big["17"]> | Func<Big["17"]>; }
 ->"17" : { common?: string; "17"?: number; ref?: Obj<Big["17"]> | Func<Big["17"]>; }
-+>"17" : { common?: string | undefined; "17"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; }
++>"17" : { "17"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; }
  >common : string | undefined
  >"17" : number | undefined
 ->ref : Obj<{ common?: string; "17"?: number; ref?: Obj<Big["17"]> | Func<Big["17"]>; }> | Func<{ common?: string; "17"?: number; ref?: Obj<Big["17"]> | Func<Big["17"]>; }> | undefined
-+>ref : Func<{ common?: string | undefined; "17"?: number | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ common?: string | undefined; "17"?: number | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
++>ref : Func<{ "17"?: number | undefined; common?: string | undefined; ref?: ??? | Obj<???> | undefined; }> | Obj<{ "17"?: number | undefined; common?: string | undefined; ref?: Func<???> | ??? | undefined; }> | undefined
  }
  declare function getCtor<T extends keyof Big>(comp: T): CtorOf<Big[T]>
  >getCtor : <T extends keyof Big>(comp: T) => CtorOf<Big[T]>
@@ -193,8 +193,8 @@
  const ctor = getCtor(all);
 ->ctor : CtorOf<{ common?: string; "0"?: number; ref?: Obj<Big["0"]> | Func<Big["0"]>; } | { common?: string; "1"?: number; ref?: Obj<Big["1"]> | Func<Big["1"]>; } | { common?: string; "2"?: number; ref?: Obj<Big["2"]> | Func<Big["2"]>; } | { common?: string; "3"?: number; ref?: Obj<Big["3"]> | Func<Big["3"]>; } | { common?: string; "4"?: number; ref?: Obj<Big["4"]> | Func<Big["4"]>; } | { common?: string; "5"?: number; ref?: Obj<Big["5"]> | Func<Big["5"]>; } | { common?: string; "6"?: number; ref?: Obj<Big["6"]> | Func<Big["6"]>; } | { common?: string; "7"?: number; ref?: Obj<Big["7"]> | Func<Big["7"]>; } | { common?: string; "8"?: number; ref?: Obj<Big["8"]> | Func<Big["8"]>; } | { common?: string; "9"?: number; ref?: Obj<Big["9"]> | Func<Big["9"]>; } | { common?: string; "10"?: number; ref?: Obj<Big["10"]> | Func<Big["10"]>; } | { common?: string; "11"?: number; ref?: Obj<Big["11"]> | Func<Big["11"]>; } | { common?: string; "12"?: number; ref?: Obj<Big["12"]> | Func<Big["12"]>; } | { common?: string; "13"?: number; ref?: Obj<Big["13"]> | Func<Big["13"]>; } | { common?: string; "14"?: number; ref?: Obj<Big["14"]> | Func<Big["14"]>; } | { common?: string; "15"?: number; ref?: Obj<Big["15"]> | Func<Big["15"]>; } | { common?: string; "16"?: number; ref?: Obj<Big["16"]> | Func<Big["16"]>; } | { common?: string; "17"?: number; ref?: Obj<Big["17"]> | Func<Big["17"]>; }>
 ->getCtor(all) : CtorOf<{ common?: string; "0"?: number; ref?: Obj<Big["0"]> | Func<Big["0"]>; } | { common?: string; "1"?: number; ref?: Obj<Big["1"]> | Func<Big["1"]>; } | { common?: string; "2"?: number; ref?: Obj<Big["2"]> | Func<Big["2"]>; } | { common?: string; "3"?: number; ref?: Obj<Big["3"]> | Func<Big["3"]>; } | { common?: string; "4"?: number; ref?: Obj<Big["4"]> | Func<Big["4"]>; } | { common?: string; "5"?: number; ref?: Obj<Big["5"]> | Func<Big["5"]>; } | { common?: string; "6"?: number; ref?: Obj<Big["6"]> | Func<Big["6"]>; } | { common?: string; "7"?: number; ref?: Obj<Big["7"]> | Func<Big["7"]>; } | { common?: string; "8"?: number; ref?: Obj<Big["8"]> | Func<Big["8"]>; } | { common?: string; "9"?: number; ref?: Obj<Big["9"]> | Func<Big["9"]>; } | { common?: string; "10"?: number; ref?: Obj<Big["10"]> | Func<Big["10"]>; } | { common?: string; "11"?: number; ref?: Obj<Big["11"]> | Func<Big["11"]>; } | { common?: string; "12"?: number; ref?: Obj<Big["12"]> | Func<Big["12"]>; } | { common?: string; "13"?: number; ref?: Obj<Big["13"]> | Func<Big["13"]>; } | { common?: string; "14"?: number; ref?: Obj<Big["14"]> | Func<Big["14"]>; } | { common?: string; "15"?: number; ref?: Obj<Big["15"]> | Func<Big["15"]>; } | { common?: string; "16"?: number; ref?: Obj<Big["16"]> | Func<Big["16"]>; } | { common?: string; "17"?: number; ref?: Obj<Big["17"]> | Func<Big["17"]>; }>
-+>ctor : CtorOf<{ common?: string | undefined; "0"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "1"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "2"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "3"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "4"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "5"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "6"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "7"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "8"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "9"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "10"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "11"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "12"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "13"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "14"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "15"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "16"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "17"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; }>
-+>getCtor(all) : CtorOf<{ common?: string | undefined; "0"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "1"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "2"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "3"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "4"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "5"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "6"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "7"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "8"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "9"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "10"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "11"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "12"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "13"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "14"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "15"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "16"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "17"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; }>
++>ctor : CtorOf<{ "0"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "1"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "2"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "3"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "4"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "5"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "6"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "7"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "8"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "9"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "10"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "11"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "12"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "13"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "14"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "15"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "16"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "17"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; }>
++>getCtor(all) : CtorOf<{ "0"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "1"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "2"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "3"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "4"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "5"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "6"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "7"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "8"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "9"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "10"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "11"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "12"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "13"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "14"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "15"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "16"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "17"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; }>
  >getCtor : <T extends keyof Big>(comp: T) => CtorOf<Big[T]>
  >all : keyof Big
  
@@ -202,9 +202,9 @@
 ->comp : { common?: string; "0"?: number; ref?: Obj<Big["0"]> | Func<Big["0"]>; } | { common?: string; "1"?: number; ref?: Obj<Big["1"]> | Func<Big["1"]>; } | { common?: string; "2"?: number; ref?: Obj<Big["2"]> | Func<Big["2"]>; } | { common?: string; "3"?: number; ref?: Obj<Big["3"]> | Func<Big["3"]>; } | { common?: string; "4"?: number; ref?: Obj<Big["4"]> | Func<Big["4"]>; } | { common?: string; "5"?: number; ref?: Obj<Big["5"]> | Func<Big["5"]>; } | { common?: string; "6"?: number; ref?: Obj<Big["6"]> | Func<Big["6"]>; } | { common?: string; "7"?: number; ref?: Obj<Big["7"]> | Func<Big["7"]>; } | { common?: string; "8"?: number; ref?: Obj<Big["8"]> | Func<Big["8"]>; } | { common?: string; "9"?: number; ref?: Obj<Big["9"]> | Func<Big["9"]>; } | { common?: string; "10"?: number; ref?: Obj<Big["10"]> | Func<Big["10"]>; } | { common?: string; "11"?: number; ref?: Obj<Big["11"]> | Func<Big["11"]>; } | { common?: string; "12"?: number; ref?: Obj<Big["12"]> | Func<Big["12"]>; } | { common?: string; "13"?: number; ref?: Obj<Big["13"]> | Func<Big["13"]>; } | { common?: string; "14"?: number; ref?: Obj<Big["14"]> | Func<Big["14"]>; } | { common?: string; "15"?: number; ref?: Obj<Big["15"]> | Func<Big["15"]>; } | { common?: string; "16"?: number; ref?: Obj<Big["16"]> | Func<Big["16"]>; } | { common?: string; "17"?: number; ref?: Obj<Big["17"]> | Func<Big["17"]>; }
 ->ctor({ common: "ok", ref: x => console.log(x) }) : { common?: string; "0"?: number; ref?: Obj<Big["0"]> | Func<Big["0"]>; } | { common?: string; "1"?: number; ref?: Obj<Big["1"]> | Func<Big["1"]>; } | { common?: string; "2"?: number; ref?: Obj<Big["2"]> | Func<Big["2"]>; } | { common?: string; "3"?: number; ref?: Obj<Big["3"]> | Func<Big["3"]>; } | { common?: string; "4"?: number; ref?: Obj<Big["4"]> | Func<Big["4"]>; } | { common?: string; "5"?: number; ref?: Obj<Big["5"]> | Func<Big["5"]>; } | { common?: string; "6"?: number; ref?: Obj<Big["6"]> | Func<Big["6"]>; } | { common?: string; "7"?: number; ref?: Obj<Big["7"]> | Func<Big["7"]>; } | { common?: string; "8"?: number; ref?: Obj<Big["8"]> | Func<Big["8"]>; } | { common?: string; "9"?: number; ref?: Obj<Big["9"]> | Func<Big["9"]>; } | { common?: string; "10"?: number; ref?: Obj<Big["10"]> | Func<Big["10"]>; } | { common?: string; "11"?: number; ref?: Obj<Big["11"]> | Func<Big["11"]>; } | { common?: string; "12"?: number; ref?: Obj<Big["12"]> | Func<Big["12"]>; } | { common?: string; "13"?: number; ref?: Obj<Big["13"]> | Func<Big["13"]>; } | { common?: string; "14"?: number; ref?: Obj<Big["14"]> | Func<Big["14"]>; } | { common?: string; "15"?: number; ref?: Obj<Big["15"]> | Func<Big["15"]>; } | { common?: string; "16"?: number; ref?: Obj<Big["16"]> | Func<Big["16"]>; } | { common?: string; "17"?: number; ref?: Obj<Big["17"]> | Func<Big["17"]>; }
 ->ctor : CtorOf<{ common?: string; "0"?: number; ref?: Obj<Big["0"]> | Func<Big["0"]>; } | { common?: string; "1"?: number; ref?: Obj<Big["1"]> | Func<Big["1"]>; } | { common?: string; "2"?: number; ref?: Obj<Big["2"]> | Func<Big["2"]>; } | { common?: string; "3"?: number; ref?: Obj<Big["3"]> | Func<Big["3"]>; } | { common?: string; "4"?: number; ref?: Obj<Big["4"]> | Func<Big["4"]>; } | { common?: string; "5"?: number; ref?: Obj<Big["5"]> | Func<Big["5"]>; } | { common?: string; "6"?: number; ref?: Obj<Big["6"]> | Func<Big["6"]>; } | { common?: string; "7"?: number; ref?: Obj<Big["7"]> | Func<Big["7"]>; } | { common?: string; "8"?: number; ref?: Obj<Big["8"]> | Func<Big["8"]>; } | { common?: string; "9"?: number; ref?: Obj<Big["9"]> | Func<Big["9"]>; } | { common?: string; "10"?: number; ref?: Obj<Big["10"]> | Func<Big["10"]>; } | { common?: string; "11"?: number; ref?: Obj<Big["11"]> | Func<Big["11"]>; } | { common?: string; "12"?: number; ref?: Obj<Big["12"]> | Func<Big["12"]>; } | { common?: string; "13"?: number; ref?: Obj<Big["13"]> | Func<Big["13"]>; } | { common?: string; "14"?: number; ref?: Obj<Big["14"]> | Func<Big["14"]>; } | { common?: string; "15"?: number; ref?: Obj<Big["15"]> | Func<Big["15"]>; } | { common?: string; "16"?: number; ref?: Obj<Big["16"]> | Func<Big["16"]>; } | { common?: string; "17"?: number; ref?: Obj<Big["17"]> | Func<Big["17"]>; }>
-+>comp : { common?: string | undefined; "0"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "1"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "2"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "3"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "4"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "5"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "6"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "7"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "8"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "9"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "10"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "11"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "12"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "13"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "14"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "15"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "16"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "17"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; }
-+>ctor({ common: "ok", ref: x => console.log(x) }) : { common?: string | undefined; "0"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "1"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "2"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "3"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "4"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "5"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "6"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "7"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "8"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "9"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "10"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "11"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "12"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "13"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "14"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "15"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "16"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "17"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; }
-+>ctor : CtorOf<{ common?: string | undefined; "0"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "1"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "2"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "3"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "4"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "5"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "6"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "7"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "8"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "9"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "10"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "11"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "12"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "13"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "14"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "15"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "16"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; } | { common?: string | undefined; "17"?: number | undefined; ref?: Func<???> | Obj<???> | undefined; }>
++>comp : { "0"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "1"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "2"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "3"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "4"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "5"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "6"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "7"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "8"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "9"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "10"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "11"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "12"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "13"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "14"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "15"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "16"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "17"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; }
++>ctor({ common: "ok", ref: x => console.log(x) }) : { "0"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "1"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "2"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "3"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "4"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "5"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "6"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "7"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "8"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "9"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "10"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "11"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "12"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "13"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "14"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "15"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "16"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "17"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; }
++>ctor : CtorOf<{ "0"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "1"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "2"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "3"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "4"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "5"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "6"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "7"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "8"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "9"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "10"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "11"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "12"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "13"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "14"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "15"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "16"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; } | { "17"?: number | undefined; common?: string | undefined; ref?: Func<???> | Obj<???> | undefined; }>
  >{ common: "ok", ref: x => console.log(x) } : { common: string; ref: (x: any) => void; }
  >common : string
  >"ok" : "ok"
diff --git a/testdata/baselines/reference/submodule/compiler/numericIndexerConstraint5.errors.txt b/testdata/baselines/reference/submodule/compiler/numericIndexerConstraint5.errors.txt
index db8882ac3e..9a3fb67dda 100644
--- a/testdata/baselines/reference/submodule/compiler/numericIndexerConstraint5.errors.txt
+++ b/testdata/baselines/reference/submodule/compiler/numericIndexerConstraint5.errors.txt
@@ -1,4 +1,4 @@
-numericIndexerConstraint5.ts(2,5): error TS2322: Type '{ name: string; 0: Date; }' is not assignable to type '{ [name: number]: string; }'.
+numericIndexerConstraint5.ts(2,5): error TS2322: Type '{ 0: Date; name: string; }' is not assignable to type '{ [name: number]: string; }'.
   Property '0' is incompatible with index signature.
     Type 'Date' is not assignable to type 'string'.
 
@@ -7,6 +7,6 @@ numericIndexerConstraint5.ts(2,5): error TS2322: Type '{ name: string; 0: Date;
     var x = { name: "x", 0: new Date() };
     var z: { [name: number]: string } = x;
         ~
-!!! error TS2322: Type '{ name: string; 0: Date; }' is not assignable to type '{ [name: number]: string; }'.
+!!! error TS2322: Type '{ 0: Date; name: string; }' is not assignable to type '{ [name: number]: string; }'.
 !!! error TS2322:   Property '0' is incompatible with index signature.
 !!! error TS2322:     Type 'Date' is not assignable to type 'string'.
\ No newline at end of file
diff --git a/testdata/baselines/reference/submodule/compiler/numericIndexerConstraint5.errors.txt.diff b/testdata/baselines/reference/submodule/compiler/numericIndexerConstraint5.errors.txt.diff
new file mode 100644
index 0000000000..e3f3c9a25d
--- /dev/null
+++ b/testdata/baselines/reference/submodule/compiler/numericIndexerConstraint5.errors.txt.diff
@@ -0,0 +1,16 @@
+--- old.numericIndexerConstraint5.errors.txt
++++ new.numericIndexerConstraint5.errors.txt
+@@= skipped -0, +0 lines =@@
+-numericIndexerConstraint5.ts(2,5): error TS2322: Type '{ name: string; 0: Date; }' is not assignable to type '{ [name: number]: string; }'.
++numericIndexerConstraint5.ts(2,5): error TS2322: Type '{ 0: Date; name: string; }' is not assignable to type '{ [name: number]: string; }'.
+   Property '0' is incompatible with index signature.
+     Type 'Date' is not assignable to type 'string'.
+ 
+@@= skipped -6, +6 lines =@@
+     var x = { name: "x", 0: new Date() };
+     var z: { [name: number]: string } = x;
+         ~
+-!!! error TS2322: Type '{ name: string; 0: Date; }' is not assignable to type '{ [name: number]: string; }'.
++!!! error TS2322: Type '{ 0: Date; name: string; }' is not assignable to type '{ [name: number]: string; }'.
+ !!! error TS2322:   Property '0' is incompatible with index signature.
+ !!! error TS2322:     Type 'Date' is not assignable to type 'string'.
diff --git a/testdata/baselines/reference/submodule/compiler/numericIndexerConstraint5.types b/testdata/baselines/reference/submodule/compiler/numericIndexerConstraint5.types
index 4a7740fbea..65761bd5ff 100644
--- a/testdata/baselines/reference/submodule/compiler/numericIndexerConstraint5.types
+++ b/testdata/baselines/reference/submodule/compiler/numericIndexerConstraint5.types
@@ -2,8 +2,8 @@
 
 === numericIndexerConstraint5.ts ===
 var x = { name: "x", 0: new Date() };
->x : { name: string; 0: Date; }
->{ name: "x", 0: new Date() } : { name: string; 0: Date; }
+>x : { 0: Date; name: string; }
+>{ name: "x", 0: new Date() } : { 0: Date; name: string; }
 >name : string
 >"x" : "x"
 >0 : Date
@@ -13,5 +13,5 @@ var x = { name: "x", 0: new Date() };
 var z: { [name: number]: string } = x;
 >z : { [name: number]: string; }
 >name : number
->x : { name: string; 0: Date; }
+>x : { 0: Date; name: string; }
 
diff --git a/testdata/baselines/reference/submodule/compiler/numericIndexerConstraint5.types.diff b/testdata/baselines/reference/submodule/compiler/numericIndexerConstraint5.types.diff
new file mode 100644
index 0000000000..3699a13d05
--- /dev/null
+++ b/testdata/baselines/reference/submodule/compiler/numericIndexerConstraint5.types.diff
@@ -0,0 +1,20 @@
+--- old.numericIndexerConstraint5.types
++++ new.numericIndexerConstraint5.types
+@@= skipped -1, +1 lines =@@
+ 
+ === numericIndexerConstraint5.ts ===
+ var x = { name: "x", 0: new Date() };
+->x : { name: string; 0: Date; }
+->{ name: "x", 0: new Date() } : { name: string; 0: Date; }
++>x : { 0: Date; name: string; }
++>{ name: "x", 0: new Date() } : { 0: Date; name: string; }
+ >name : string
+ >"x" : "x"
+ >0 : Date
+@@= skipped -11, +11 lines =@@
+ var z: { [name: number]: string } = x;
+ >z : { [name: number]: string; }
+ >name : number
+->x : { name: string; 0: Date; }
++>x : { 0: Date; name: string; }
+ 
diff --git a/testdata/baselines/reference/submodule/compiler/objectLiteralIndexerErrors.types b/testdata/baselines/reference/submodule/compiler/objectLiteralIndexerErrors.types
index 1d8b0bbba0..776c4f89f7 100644
--- a/testdata/baselines/reference/submodule/compiler/objectLiteralIndexerErrors.types
+++ b/testdata/baselines/reference/submodule/compiler/objectLiteralIndexerErrors.types
@@ -28,16 +28,16 @@ var o1: { [s: string]: A;[n: number]: B; } = { x: b, 0: a }; // both indexers ar
 >o1 : { [s: string]: A; [n: number]: B; }
 >s : string
 >n : number
->{ x: b, 0: a } : { x: B; 0: A; }
+>{ x: b, 0: a } : { 0: A; x: B; }
 >x : B
 >b : B
 >0 : A
 >a : A
 
 o1 = { x: c, 0: a }; // string indexer is any, number indexer is A
->o1 = { x: c, 0: a } : { x: any; 0: A; }
+>o1 = { x: c, 0: a } : { 0: A; x: any; }
 >o1 : { [s: string]: A; [n: number]: B; }
->{ x: c, 0: a } : { x: any; 0: A; }
+>{ x: c, 0: a } : { 0: A; x: any; }
 >x : any
 >c : any
 >0 : A
diff --git a/testdata/baselines/reference/submodule/compiler/objectLiteralIndexerErrors.types.diff b/testdata/baselines/reference/submodule/compiler/objectLiteralIndexerErrors.types.diff
index fd53c02709..9ab58ef0b4 100644
--- a/testdata/baselines/reference/submodule/compiler/objectLiteralIndexerErrors.types.diff
+++ b/testdata/baselines/reference/submodule/compiler/objectLiteralIndexerErrors.types.diff
@@ -16,3 +16,23 @@
      y: string;
  >y : string
  }
+@@= skipped -22, +26 lines =@@
+ >o1 : { [s: string]: A; [n: number]: B; }
+ >s : string
+ >n : number
+->{ x: b, 0: a } : { x: B; 0: A; }
++>{ x: b, 0: a } : { 0: A; x: B; }
+ >x : B
+ >b : B
+ >0 : A
+ >a : A
+ 
+ o1 = { x: c, 0: a }; // string indexer is any, number indexer is A
+->o1 = { x: c, 0: a } : { x: any; 0: A; }
++>o1 = { x: c, 0: a } : { 0: A; x: any; }
+ >o1 : { [s: string]: A; [n: number]: B; }
+->{ x: c, 0: a } : { x: any; 0: A; }
++>{ x: c, 0: a } : { 0: A; x: any; }
+ >x : any
+ >c : any
+ >0 : A
diff --git a/testdata/baselines/reference/submodule/compiler/objectLiteralIndexers.types b/testdata/baselines/reference/submodule/compiler/objectLiteralIndexers.types
index dd66588eee..be2fe439c4 100644
--- a/testdata/baselines/reference/submodule/compiler/objectLiteralIndexers.types
+++ b/testdata/baselines/reference/submodule/compiler/objectLiteralIndexers.types
@@ -28,25 +28,25 @@ var o1: { [s: string]: A;[n: number]: B; } = { x: a, 0: b }; // string indexer i
 >o1 : { [s: string]: A; [n: number]: B; }
 >s : string
 >n : number
->{ x: a, 0: b } : { x: A; 0: B; }
+>{ x: a, 0: b } : { 0: B; x: A; }
 >x : A
 >a : A
 >0 : B
 >b : B
 
 o1 = { x: b, 0: c }; // both indexers are any
->o1 = { x: b, 0: c } : { x: B; 0: any; }
+>o1 = { x: b, 0: c } : { 0: any; x: B; }
 >o1 : { [s: string]: A; [n: number]: B; }
->{ x: b, 0: c } : { x: B; 0: any; }
+>{ x: b, 0: c } : { 0: any; x: B; }
 >x : B
 >b : B
 >0 : any
 >c : any
 
 o1 = { x: c, 0: b }; // string indexer is any, number indexer is B
->o1 = { x: c, 0: b } : { x: any; 0: B; }
+>o1 = { x: c, 0: b } : { 0: B; x: any; }
 >o1 : { [s: string]: A; [n: number]: B; }
->{ x: c, 0: b } : { x: any; 0: B; }
+>{ x: c, 0: b } : { 0: B; x: any; }
 >x : any
 >c : any
 >0 : B
diff --git a/testdata/baselines/reference/submodule/compiler/objectLiteralIndexers.types.diff b/testdata/baselines/reference/submodule/compiler/objectLiteralIndexers.types.diff
index 45e68e1121..59504b5cd7 100644
--- a/testdata/baselines/reference/submodule/compiler/objectLiteralIndexers.types.diff
+++ b/testdata/baselines/reference/submodule/compiler/objectLiteralIndexers.types.diff
@@ -16,3 +16,34 @@
      y: string;
  >y : string
  }
+@@= skipped -22, +26 lines =@@
+ >o1 : { [s: string]: A; [n: number]: B; }
+ >s : string
+ >n : number
+->{ x: a, 0: b } : { x: A; 0: B; }
++>{ x: a, 0: b } : { 0: B; x: A; }
+ >x : A
+ >a : A
+ >0 : B
+ >b : B
+ 
+ o1 = { x: b, 0: c }; // both indexers are any
+->o1 = { x: b, 0: c } : { x: B; 0: any; }
++>o1 = { x: b, 0: c } : { 0: any; x: B; }
+ >o1 : { [s: string]: A; [n: number]: B; }
+->{ x: b, 0: c } : { x: B; 0: any; }
++>{ x: b, 0: c } : { 0: any; x: B; }
+ >x : B
+ >b : B
+ >0 : any
+ >c : any
+ 
+ o1 = { x: c, 0: b }; // string indexer is any, number indexer is B
+->o1 = { x: c, 0: b } : { x: any; 0: B; }
++>o1 = { x: c, 0: b } : { 0: B; x: any; }
+ >o1 : { [s: string]: A; [n: number]: B; }
+->{ x: c, 0: b } : { x: any; 0: B; }
++>{ x: c, 0: b } : { 0: B; x: any; }
+ >x : any
+ >c : any
+ >0 : B
diff --git a/testdata/baselines/reference/submodule/compiler/propertiesAndIndexers.types b/testdata/baselines/reference/submodule/compiler/propertiesAndIndexers.types
index fa1169b56c..1adf15f02b 100644
--- a/testdata/baselines/reference/submodule/compiler/propertiesAndIndexers.types
+++ b/testdata/baselines/reference/submodule/compiler/propertiesAndIndexers.types
@@ -98,7 +98,7 @@ class Q extends P {
 }
 
 var c: {
->c : { [n: number]: string; c: boolean; 3: boolean; }
+>c : { [n: number]: string; 3: boolean; c: boolean; }
 
     [n: number]: string;
 >n : number
diff --git a/testdata/baselines/reference/submodule/compiler/propertiesAndIndexers.types.diff b/testdata/baselines/reference/submodule/compiler/propertiesAndIndexers.types.diff
index aa45615658..f6af82542a 100644
--- a/testdata/baselines/reference/submodule/compiler/propertiesAndIndexers.types.diff
+++ b/testdata/baselines/reference/submodule/compiler/propertiesAndIndexers.types.diff
@@ -61,3 +61,12 @@
      2: Z;
  >2 : Z
  
+@@= skipped -26, +28 lines =@@
+ }
+ 
+ var c: {
+->c : { [n: number]: string; c: boolean; 3: boolean; }
++>c : { [n: number]: string; 3: boolean; c: boolean; }
+ 
+     [n: number]: string;
+ >n : number
diff --git a/testdata/baselines/reference/submodule/compiler/ramdaToolsNoInfinite2.types b/testdata/baselines/reference/submodule/compiler/ramdaToolsNoInfinite2.types
index c125b76c1d..13f4dead7a 100644
--- a/testdata/baselines/reference/submodule/compiler/ramdaToolsNoInfinite2.types
+++ b/testdata/baselines/reference/submodule/compiler/ramdaToolsNoInfinite2.types
@@ -497,7 +497,7 @@ declare module "Number/_Internal" {
 >Numbers : Numbers
 
         'string': {
->'string' : { all: "-1" | "-10" | "-11" | "-12" | "-13" | "-14" | "-15" | "-16" | "-17" | "-18" | "-19" | "-2" | "-20" | "-21" | "-22" | "-23" | "-24" | "-25" | "-26" | "-27" | "-28" | "-29" | "-3" | "-30" | "-31" | "-32" | "-33" | "-34" | "-35" | "-36" | "-37" | "-38" | "-39" | "-4" | "-40" | "-5" | "-6" | "-7" | "-8" | "-9" | "0" | "1" | "10" | "11" | "12" | "13" | "14" | "15" | "16" | "17" | "18" | "19" | "2" | "20" | "21" | "22" | "23" | "24" | "25" | "26" | "27" | "28" | "29" | "3" | "30" | "31" | "32" | "33" | "34" | "35" | "36" | "37" | "38" | "39" | "4" | "40" | "5" | "6" | "7" | "8" | "9"; '+': "1" | "10" | "11" | "12" | "13" | "14" | "15" | "16" | "17" | "18" | "19" | "2" | "20" | "21" | "22" | "23" | "24" | "25" | "26" | "27" | "28" | "29" | "3" | "30" | "31" | "32" | "33" | "34" | "35" | "36" | "37" | "38" | "39" | "4" | "40" | "5" | "6" | "7" | "8" | "9"; '-': "-1" | "-10" | "-11" | "-12" | "-13" | "-14" | "-15" | "-16" | "-17" | "-18" | "-19" | "-2" | "-20" | "-21" | "-22" | "-23" | "-24" | "-25" | "-26" | "-27" | "-28" | "-29" | "-3" | "-30" | "-31" | "-32" | "-33" | "-34" | "-35" | "-36" | "-37" | "-38" | "-39" | "-4" | "-40" | "-5" | "-6" | "-7" | "-8" | "-9"; '0': "0"; }
+>'string' : { '0': "0"; all: "-1" | "-10" | "-11" | "-12" | "-13" | "-14" | "-15" | "-16" | "-17" | "-18" | "-19" | "-2" | "-20" | "-21" | "-22" | "-23" | "-24" | "-25" | "-26" | "-27" | "-28" | "-29" | "-3" | "-30" | "-31" | "-32" | "-33" | "-34" | "-35" | "-36" | "-37" | "-38" | "-39" | "-4" | "-40" | "-5" | "-6" | "-7" | "-8" | "-9" | "0" | "1" | "10" | "11" | "12" | "13" | "14" | "15" | "16" | "17" | "18" | "19" | "2" | "20" | "21" | "22" | "23" | "24" | "25" | "26" | "27" | "28" | "29" | "3" | "30" | "31" | "32" | "33" | "34" | "35" | "36" | "37" | "38" | "39" | "4" | "40" | "5" | "6" | "7" | "8" | "9"; '+': "1" | "10" | "11" | "12" | "13" | "14" | "15" | "16" | "17" | "18" | "19" | "2" | "20" | "21" | "22" | "23" | "24" | "25" | "26" | "27" | "28" | "29" | "3" | "30" | "31" | "32" | "33" | "34" | "35" | "36" | "37" | "38" | "39" | "4" | "40" | "5" | "6" | "7" | "8" | "9"; '-': "-1" | "-10" | "-11" | "-12" | "-13" | "-14" | "-15" | "-16" | "-17" | "-18" | "-19" | "-2" | "-20" | "-21" | "-22" | "-23" | "-24" | "-25" | "-26" | "-27" | "-28" | "-29" | "-3" | "-30" | "-31" | "-32" | "-33" | "-34" | "-35" | "-36" | "-37" | "-38" | "-39" | "-4" | "-40" | "-5" | "-6" | "-7" | "-8" | "-9"; }
 
             'all': Format<IterationMap[KnownIterationMapKeys], 's'>;
 >'all' : "-1" | "-10" | "-11" | "-12" | "-13" | "-14" | "-15" | "-16" | "-17" | "-18" | "-19" | "-2" | "-20" | "-21" | "-22" | "-23" | "-24" | "-25" | "-26" | "-27" | "-28" | "-29" | "-3" | "-30" | "-31" | "-32" | "-33" | "-34" | "-35" | "-36" | "-37" | "-38" | "-39" | "-4" | "-40" | "-5" | "-6" | "-7" | "-8" | "-9" | "0" | "1" | "10" | "11" | "12" | "13" | "14" | "15" | "16" | "17" | "18" | "19" | "2" | "20" | "21" | "22" | "23" | "24" | "25" | "26" | "27" | "28" | "29" | "3" | "30" | "31" | "32" | "33" | "34" | "35" | "36" | "37" | "38" | "39" | "4" | "40" | "5" | "6" | "7" | "8" | "9"
@@ -513,7 +513,7 @@ declare module "Number/_Internal" {
 
         };
         'number': {
->'number' : { all: -40 | -39 | -38 | -37 | -36 | -35 | -34 | -33 | -32 | -31 | -30 | -29 | -28 | -27 | -26 | -25 | -24 | -23 | -22 | -21 | -20 | -19 | -18 | -17 | -16 | -15 | -14 | -13 | -12 | -11 | -10 | -9 | -8 | -7 | -6 | -5 | -4 | -3 | -2 | -1 | 0 | 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; '+': 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; '-': -40 | -39 | -38 | -37 | -36 | -35 | -34 | -33 | -32 | -31 | -30 | -29 | -28 | -27 | -26 | -25 | -24 | -23 | -22 | -21 | -20 | -19 | -18 | -17 | -16 | -15 | -14 | -13 | -12 | -11 | -10 | -9 | -8 | -7 | -6 | -5 | -4 | -3 | -2 | -1; '0': 0; }
+>'number' : { '0': 0; all: -40 | -39 | -38 | -37 | -36 | -35 | -34 | -33 | -32 | -31 | -30 | -29 | -28 | -27 | -26 | -25 | -24 | -23 | -22 | -21 | -20 | -19 | -18 | -17 | -16 | -15 | -14 | -13 | -12 | -11 | -10 | -9 | -8 | -7 | -6 | -5 | -4 | -3 | -2 | -1 | 0 | 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; '+': 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; '-': -40 | -39 | -38 | -37 | -36 | -35 | -34 | -33 | -32 | -31 | -30 | -29 | -28 | -27 | -26 | -25 | -24 | -23 | -22 | -21 | -20 | -19 | -18 | -17 | -16 | -15 | -14 | -13 | -12 | -11 | -10 | -9 | -8 | -7 | -6 | -5 | -4 | -3 | -2 | -1; }
 
             'all': Format<IterationMap[KnownIterationMapKeys], 'n'>;
 >'all' : -40 | -39 | -38 | -37 | -36 | -35 | -34 | -33 | -32 | -31 | -30 | -29 | -28 | -27 | -26 | -25 | -24 | -23 | -22 | -21 | -20 | -19 | -18 | -17 | -16 | -15 | -14 | -13 | -12 | -11 | -10 | -9 | -8 | -7 | -6 | -5 | -4 | -3 | -2 | -1 | 0 | 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
diff --git a/testdata/baselines/reference/submodule/compiler/ramdaToolsNoInfinite2.types.diff b/testdata/baselines/reference/submodule/compiler/ramdaToolsNoInfinite2.types.diff
index bcaeafe9b2..46772178de 100644
--- a/testdata/baselines/reference/submodule/compiler/ramdaToolsNoInfinite2.types.diff
+++ b/testdata/baselines/reference/submodule/compiler/ramdaToolsNoInfinite2.types.diff
@@ -296,7 +296,7 @@
  
          'string': {
 ->'string' : { all: Format<IterationMap[KnownIterationMapKeys], "s">; '+': Format<IterationMap[PositiveIterationKeys], "s">; '-': Format<IterationMap[NegativeIterationKeys], "s">; '0': Format<IterationMap["0"], "s">; }
-+>'string' : { all: "-1" | "-10" | "-11" | "-12" | "-13" | "-14" | "-15" | "-16" | "-17" | "-18" | "-19" | "-2" | "-20" | "-21" | "-22" | "-23" | "-24" | "-25" | "-26" | "-27" | "-28" | "-29" | "-3" | "-30" | "-31" | "-32" | "-33" | "-34" | "-35" | "-36" | "-37" | "-38" | "-39" | "-4" | "-40" | "-5" | "-6" | "-7" | "-8" | "-9" | "0" | "1" | "10" | "11" | "12" | "13" | "14" | "15" | "16" | "17" | "18" | "19" | "2" | "20" | "21" | "22" | "23" | "24" | "25" | "26" | "27" | "28" | "29" | "3" | "30" | "31" | "32" | "33" | "34" | "35" | "36" | "37" | "38" | "39" | "4" | "40" | "5" | "6" | "7" | "8" | "9"; '+': "1" | "10" | "11" | "12" | "13" | "14" | "15" | "16" | "17" | "18" | "19" | "2" | "20" | "21" | "22" | "23" | "24" | "25" | "26" | "27" | "28" | "29" | "3" | "30" | "31" | "32" | "33" | "34" | "35" | "36" | "37" | "38" | "39" | "4" | "40" | "5" | "6" | "7" | "8" | "9"; '-': "-1" | "-10" | "-11" | "-12" | "-13" | "-14" | "-15" | "-16" | "-17" | "-18" | "-19" | "-2" | "-20" | "-21" | "-22" | "-23" | "-24" | "-25" | "-26" | "-27" | "-28" | "-29" | "-3" | "-30" | "-31" | "-32" | "-33" | "-34" | "-35" | "-36" | "-37" | "-38" | "-39" | "-4" | "-40" | "-5" | "-6" | "-7" | "-8" | "-9"; '0': "0"; }
++>'string' : { '0': "0"; all: "-1" | "-10" | "-11" | "-12" | "-13" | "-14" | "-15" | "-16" | "-17" | "-18" | "-19" | "-2" | "-20" | "-21" | "-22" | "-23" | "-24" | "-25" | "-26" | "-27" | "-28" | "-29" | "-3" | "-30" | "-31" | "-32" | "-33" | "-34" | "-35" | "-36" | "-37" | "-38" | "-39" | "-4" | "-40" | "-5" | "-6" | "-7" | "-8" | "-9" | "0" | "1" | "10" | "11" | "12" | "13" | "14" | "15" | "16" | "17" | "18" | "19" | "2" | "20" | "21" | "22" | "23" | "24" | "25" | "26" | "27" | "28" | "29" | "3" | "30" | "31" | "32" | "33" | "34" | "35" | "36" | "37" | "38" | "39" | "4" | "40" | "5" | "6" | "7" | "8" | "9"; '+': "1" | "10" | "11" | "12" | "13" | "14" | "15" | "16" | "17" | "18" | "19" | "2" | "20" | "21" | "22" | "23" | "24" | "25" | "26" | "27" | "28" | "29" | "3" | "30" | "31" | "32" | "33" | "34" | "35" | "36" | "37" | "38" | "39" | "4" | "40" | "5" | "6" | "7" | "8" | "9"; '-': "-1" | "-10" | "-11" | "-12" | "-13" | "-14" | "-15" | "-16" | "-17" | "-18" | "-19" | "-2" | "-20" | "-21" | "-22" | "-23" | "-24" | "-25" | "-26" | "-27" | "-28" | "-29" | "-3" | "-30" | "-31" | "-32" | "-33" | "-34" | "-35" | "-36" | "-37" | "-38" | "-39" | "-4" | "-40" | "-5" | "-6" | "-7" | "-8" | "-9"; }
  
              'all': Format<IterationMap[KnownIterationMapKeys], 's'>;
 ->'all' : "-40" | "-39" | "-38" | "-37" | "-36" | "-35" | "-34" | "-33" | "-32" | "-31" | "-30" | "-29" | "-28" | "-27" | "-26" | "-25" | "-24" | "-23" | "-22" | "-21" | "-20" | "-19" | "-18" | "-17" | "-16" | "-15" | "-14" | "-13" | "-12" | "-11" | "-10" | "-9" | "-8" | "-7" | "-6" | "-5" | "-4" | "-3" | "-2" | "-1" | "0" | "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"
@@ -316,7 +316,7 @@
          };
          'number': {
 ->'number' : { all: Format<IterationMap[KnownIterationMapKeys], "n">; '+': Format<IterationMap[PositiveIterationKeys], "n">; '-': Format<IterationMap[NegativeIterationKeys], "n">; '0': Format<IterationMap["0"], "n">; }
-+>'number' : { all: -40 | -39 | -38 | -37 | -36 | -35 | -34 | -33 | -32 | -31 | -30 | -29 | -28 | -27 | -26 | -25 | -24 | -23 | -22 | -21 | -20 | -19 | -18 | -17 | -16 | -15 | -14 | -13 | -12 | -11 | -10 | -9 | -8 | -7 | -6 | -5 | -4 | -3 | -2 | -1 | 0 | 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; '+': 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; '-': -40 | -39 | -38 | -37 | -36 | -35 | -34 | -33 | -32 | -31 | -30 | -29 | -28 | -27 | -26 | -25 | -24 | -23 | -22 | -21 | -20 | -19 | -18 | -17 | -16 | -15 | -14 | -13 | -12 | -11 | -10 | -9 | -8 | -7 | -6 | -5 | -4 | -3 | -2 | -1; '0': 0; }
++>'number' : { '0': 0; all: -40 | -39 | -38 | -37 | -36 | -35 | -34 | -33 | -32 | -31 | -30 | -29 | -28 | -27 | -26 | -25 | -24 | -23 | -22 | -21 | -20 | -19 | -18 | -17 | -16 | -15 | -14 | -13 | -12 | -11 | -10 | -9 | -8 | -7 | -6 | -5 | -4 | -3 | -2 | -1 | 0 | 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; '+': 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; '-': -40 | -39 | -38 | -37 | -36 | -35 | -34 | -33 | -32 | -31 | -30 | -29 | -28 | -27 | -26 | -25 | -24 | -23 | -22 | -21 | -20 | -19 | -18 | -17 | -16 | -15 | -14 | -13 | -12 | -11 | -10 | -9 | -8 | -7 | -6 | -5 | -4 | -3 | -2 | -1; }
  
              'all': Format<IterationMap[KnownIterationMapKeys], 'n'>;
 ->'all' : 0 | 1 | 3 | 5 | 40 | -40 | 39 | -39 | 38 | -38 | 37 | -37 | 36 | -36 | 35 | -35 | 34 | -34 | 33 | -33 | 32 | -32 | 31 | -31 | 30 | -30 | 29 | -29 | 28 | -28 | 27 | -27 | 26 | -26 | 25 | -25 | 24 | -24 | 23 | -23 | 22 | -22 | 21 | -21 | 20 | -20 | 19 | -19 | 18 | -18 | 17 | -17 | 16 | -16 | 15 | -15 | 14 | -14 | 13 | -13 | 12 | -12 | 11 | -11 | 10 | -10 | 9 | -9 | 8 | -8 | 7 | -7 | 6 | -6 | -5 | 4 | -4 | -3 | 2 | -2 | -1
diff --git a/testdata/baselines/reference/submodule/compiler/restElementWithNumberPropertyName.types b/testdata/baselines/reference/submodule/compiler/restElementWithNumberPropertyName.types
index d70de3241d..a73c835368 100644
--- a/testdata/baselines/reference/submodule/compiler/restElementWithNumberPropertyName.types
+++ b/testdata/baselines/reference/submodule/compiler/restElementWithNumberPropertyName.types
@@ -3,7 +3,7 @@
 === restElementWithNumberPropertyName.ts ===
 const { 0: a, ...b } = [0, 1, 2];
 >a : number
->b : { [n: number]: number; toString: () => string; toLocaleString: () => string; pop: () => number; push: (...items: number[]) => number; concat: { (...items: ConcatArray<number>[]): number[]; (...items: (number | ConcatArray<number>)[]): number[]; }; join: (separator?: string) => string; reverse: () => number[]; shift: () => number; slice: (start?: number, end?: number) => number[]; sort: (compareFn?: (a: number, b: number) => number) => [number, number, number]; splice: { (start: number, deleteCount?: number): number[]; (start: number, deleteCount: number, ...items: number[]): number[]; }; unshift: (...items: number[]) => number; indexOf: (searchElement: number, fromIndex?: number) => number; lastIndexOf: (searchElement: number, fromIndex?: number) => number; every: { <S extends number>(predicate: (value: number, index: number, array: number[]) => value is S, thisArg?: any): this is S[]; (predicate: (value: number, index: number, array: number[]) => unknown, thisArg?: any): boolean; }; some: (predicate: (value: number, index: number, array: number[]) => unknown, thisArg?: any) => boolean; forEach: (callbackfn: (value: number, index: number, array: number[]) => void, thisArg?: any) => void; map: <U>(callbackfn: (value: number, index: number, array: number[]) => U, thisArg?: any) => U[]; filter: { <S extends number>(predicate: (value: number, index: number, array: number[]) => value is S, thisArg?: any): S[]; (predicate: (value: number, index: number, array: number[]) => unknown, thisArg?: any): number[]; }; reduce: { (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number): number; (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number, initialValue: number): number; <U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: number[]) => U, initialValue: U): U; }; reduceRight: { (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number): number; (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number, initialValue: number): number; <U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: number[]) => U, initialValue: U): U; }; 0: number; 1: number; 2: number; length: 3; }
+>b : { [n: number]: number; 0: number; 1: number; 2: number; toString: () => string; toLocaleString: () => string; pop: () => number; push: (...items: number[]) => number; concat: { (...items: ConcatArray<number>[]): number[]; (...items: (number | ConcatArray<number>)[]): number[]; }; join: (separator?: string) => string; reverse: () => number[]; shift: () => number; slice: (start?: number, end?: number) => number[]; sort: (compareFn?: (a: number, b: number) => number) => [number, number, number]; splice: { (start: number, deleteCount?: number): number[]; (start: number, deleteCount: number, ...items: number[]): number[]; }; unshift: (...items: number[]) => number; indexOf: (searchElement: number, fromIndex?: number) => number; lastIndexOf: (searchElement: number, fromIndex?: number) => number; every: { <S extends number>(predicate: (value: number, index: number, array: number[]) => value is S, thisArg?: any): this is S[]; (predicate: (value: number, index: number, array: number[]) => unknown, thisArg?: any): boolean; }; some: (predicate: (value: number, index: number, array: number[]) => unknown, thisArg?: any) => boolean; forEach: (callbackfn: (value: number, index: number, array: number[]) => void, thisArg?: any) => void; map: <U>(callbackfn: (value: number, index: number, array: number[]) => U, thisArg?: any) => U[]; filter: { <S extends number>(predicate: (value: number, index: number, array: number[]) => value is S, thisArg?: any): S[]; (predicate: (value: number, index: number, array: number[]) => unknown, thisArg?: any): number[]; }; reduce: { (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number): number; (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number, initialValue: number): number; <U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: number[]) => U, initialValue: U): U; }; reduceRight: { (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number): number; (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number, initialValue: number): number; <U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: number[]) => U, initialValue: U): U; }; length: 3; }
 >[0, 1, 2] : [number, number, number]
 >0 : 0
 >1 : 1
diff --git a/testdata/baselines/reference/submodule/compiler/restElementWithNumberPropertyName.types.diff b/testdata/baselines/reference/submodule/compiler/restElementWithNumberPropertyName.types.diff
index c78a56b2d4..4654eedb17 100644
--- a/testdata/baselines/reference/submodule/compiler/restElementWithNumberPropertyName.types.diff
+++ b/testdata/baselines/reference/submodule/compiler/restElementWithNumberPropertyName.types.diff
@@ -5,7 +5,7 @@
  const { 0: a, ...b } = [0, 1, 2];
  >a : number
 ->b : { [n: number]: number; 0: number; 1: number; 2: number; length: 3; toString(): string; toLocaleString(): string; pop(): number; push(...items: number[]): number; concat(...items: ConcatArray<number>[]): number[]; concat(...items: (number | ConcatArray<number>)[]): number[]; join(separator?: string): string; reverse(): number[]; shift(): number; slice(start?: number, end?: number): number[]; sort(compareFn?: (a: number, b: number) => number): [number, number, number]; splice(start: number, deleteCount?: number): number[]; splice(start: number, deleteCount: number, ...items: number[]): number[]; unshift(...items: number[]): number; indexOf(searchElement: number, fromIndex?: number): number; lastIndexOf(searchElement: number, fromIndex?: number): number; every<S extends number>(predicate: (value: number, index: number, array: number[]) => value is S, thisArg?: any): this is S[]; every(predicate: (value: number, index: number, array: number[]) => unknown, thisArg?: any): boolean; some(predicate: (value: number, index: number, array: number[]) => unknown, thisArg?: any): boolean; forEach(callbackfn: (value: number, index: number, array: number[]) => void, thisArg?: any): void; map<U>(callbackfn: (value: number, index: number, array: number[]) => U, thisArg?: any): U[]; filter<S extends number>(predicate: (value: number, index: number, array: number[]) => value is S, thisArg?: any): S[]; filter(predicate: (value: number, index: number, array: number[]) => unknown, thisArg?: any): number[]; reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number): number; reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number, initialValue: number): number; reduce<U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: number[]) => U, initialValue: U): U; reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number): number; reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number, initialValue: number): number; reduceRight<U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: number[]) => U, initialValue: U): U; }
-+>b : { [n: number]: number; toString: () => string; toLocaleString: () => string; pop: () => number; push: (...items: number[]) => number; concat: { (...items: ConcatArray<number>[]): number[]; (...items: (number | ConcatArray<number>)[]): number[]; }; join: (separator?: string) => string; reverse: () => number[]; shift: () => number; slice: (start?: number, end?: number) => number[]; sort: (compareFn?: (a: number, b: number) => number) => [number, number, number]; splice: { (start: number, deleteCount?: number): number[]; (start: number, deleteCount: number, ...items: number[]): number[]; }; unshift: (...items: number[]) => number; indexOf: (searchElement: number, fromIndex?: number) => number; lastIndexOf: (searchElement: number, fromIndex?: number) => number; every: { <S extends number>(predicate: (value: number, index: number, array: number[]) => value is S, thisArg?: any): this is S[]; (predicate: (value: number, index: number, array: number[]) => unknown, thisArg?: any): boolean; }; some: (predicate: (value: number, index: number, array: number[]) => unknown, thisArg?: any) => boolean; forEach: (callbackfn: (value: number, index: number, array: number[]) => void, thisArg?: any) => void; map: <U>(callbackfn: (value: number, index: number, array: number[]) => U, thisArg?: any) => U[]; filter: { <S extends number>(predicate: (value: number, index: number, array: number[]) => value is S, thisArg?: any): S[]; (predicate: (value: number, index: number, array: number[]) => unknown, thisArg?: any): number[]; }; reduce: { (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number): number; (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number, initialValue: number): number; <U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: number[]) => U, initialValue: U): U; }; reduceRight: { (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number): number; (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number, initialValue: number): number; <U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: number[]) => U, initialValue: U): U; }; 0: number; 1: number; 2: number; length: 3; }
++>b : { [n: number]: number; 0: number; 1: number; 2: number; toString: () => string; toLocaleString: () => string; pop: () => number; push: (...items: number[]) => number; concat: { (...items: ConcatArray<number>[]): number[]; (...items: (number | ConcatArray<number>)[]): number[]; }; join: (separator?: string) => string; reverse: () => number[]; shift: () => number; slice: (start?: number, end?: number) => number[]; sort: (compareFn?: (a: number, b: number) => number) => [number, number, number]; splice: { (start: number, deleteCount?: number): number[]; (start: number, deleteCount: number, ...items: number[]): number[]; }; unshift: (...items: number[]) => number; indexOf: (searchElement: number, fromIndex?: number) => number; lastIndexOf: (searchElement: number, fromIndex?: number) => number; every: { <S extends number>(predicate: (value: number, index: number, array: number[]) => value is S, thisArg?: any): this is S[]; (predicate: (value: number, index: number, array: number[]) => unknown, thisArg?: any): boolean; }; some: (predicate: (value: number, index: number, array: number[]) => unknown, thisArg?: any) => boolean; forEach: (callbackfn: (value: number, index: number, array: number[]) => void, thisArg?: any) => void; map: <U>(callbackfn: (value: number, index: number, array: number[]) => U, thisArg?: any) => U[]; filter: { <S extends number>(predicate: (value: number, index: number, array: number[]) => value is S, thisArg?: any): S[]; (predicate: (value: number, index: number, array: number[]) => unknown, thisArg?: any): number[]; }; reduce: { (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number): number; (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number, initialValue: number): number; <U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: number[]) => U, initialValue: U): U; }; reduceRight: { (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number): number; (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number, initialValue: number): number; <U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: number[]) => U, initialValue: U): U; }; length: 3; }
  >[0, 1, 2] : [number, number, number]
  >0 : 0
  >1 : 1
diff --git a/testdata/baselines/reference/submodule/compiler/restParameterWithBindingPattern3.types b/testdata/baselines/reference/submodule/compiler/restParameterWithBindingPattern3.types
index 8069ececdc..04c75dcd09 100644
--- a/testdata/baselines/reference/submodule/compiler/restParameterWithBindingPattern3.types
+++ b/testdata/baselines/reference/submodule/compiler/restParameterWithBindingPattern3.types
@@ -31,5 +31,5 @@ function e(...{0: a = 1, 1: b = true, ...rest: rest}: [boolean, string, number])
 >b : string
 >true : true
 >rest : any
->rest : { [n: number]: string | number | boolean; toString: () => string; toLocaleString: () => string; pop: () => string | number | boolean; push: (...items: (string | number | boolean)[]) => number; concat: { (...items: ConcatArray<string | number | boolean>[]): (string | number | boolean)[]; (...items: (string | number | boolean | ConcatArray<string | number | boolean>)[]): (string | number | boolean)[]; }; join: (separator?: string) => string; reverse: () => (string | number | boolean)[]; shift: () => string | number | boolean; slice: (start?: number, end?: number) => (string | number | boolean)[]; sort: (compareFn?: (a: string | number | boolean, b: string | number | boolean) => number) => [boolean, string, number]; splice: { (start: number, deleteCount?: number): (string | number | boolean)[]; (start: number, deleteCount: number, ...items: (string | number | boolean)[]): (string | number | boolean)[]; }; unshift: (...items: (string | number | boolean)[]) => number; indexOf: (searchElement: string | number | boolean, fromIndex?: number) => number; lastIndexOf: (searchElement: string | number | boolean, fromIndex?: number) => number; every: { <S extends string | number | boolean>(predicate: (value: string | number | boolean, index: number, array: (string | number | boolean)[]) => value is S, thisArg?: any): this is S[]; (predicate: (value: string | number | boolean, index: number, array: (string | number | boolean)[]) => unknown, thisArg?: any): boolean; }; some: (predicate: (value: string | number | boolean, index: number, array: (string | number | boolean)[]) => unknown, thisArg?: any) => boolean; forEach: (callbackfn: (value: string | number | boolean, index: number, array: (string | number | boolean)[]) => void, thisArg?: any) => void; map: <U>(callbackfn: (value: string | number | boolean, index: number, array: (string | number | boolean)[]) => U, thisArg?: any) => U[]; filter: { <S extends string | number | boolean>(predicate: (value: string | number | boolean, index: number, array: (string | number | boolean)[]) => value is S, thisArg?: any): S[]; (predicate: (value: string | number | boolean, index: number, array: (string | number | boolean)[]) => unknown, thisArg?: any): (string | number | boolean)[]; }; reduce: { (callbackfn: (previousValue: string | number | boolean, currentValue: string | number | boolean, currentIndex: number, array: (string | number | boolean)[]) => string | number | boolean): string | number | boolean; (callbackfn: (previousValue: string | number | boolean, currentValue: string | number | boolean, currentIndex: number, array: (string | number | boolean)[]) => string | number | boolean, initialValue: string | number | boolean): string | number | boolean; <U>(callbackfn: (previousValue: U, currentValue: string | number | boolean, currentIndex: number, array: (string | number | boolean)[]) => U, initialValue: U): U; }; reduceRight: { (callbackfn: (previousValue: string | number | boolean, currentValue: string | number | boolean, currentIndex: number, array: (string | number | boolean)[]) => string | number | boolean): string | number | boolean; (callbackfn: (previousValue: string | number | boolean, currentValue: string | number | boolean, currentIndex: number, array: (string | number | boolean)[]) => string | number | boolean, initialValue: string | number | boolean): string | number | boolean; <U>(callbackfn: (previousValue: U, currentValue: string | number | boolean, currentIndex: number, array: (string | number | boolean)[]) => U, initialValue: U): U; }; 0: boolean; 1: string; 2: number; length: 3; }
+>rest : { [n: number]: string | number | boolean; 0: boolean; 1: string; 2: number; toString: () => string; toLocaleString: () => string; pop: () => string | number | boolean; push: (...items: (string | number | boolean)[]) => number; concat: { (...items: ConcatArray<string | number | boolean>[]): (string | number | boolean)[]; (...items: (string | number | boolean | ConcatArray<string | number | boolean>)[]): (string | number | boolean)[]; }; join: (separator?: string) => string; reverse: () => (string | number | boolean)[]; shift: () => string | number | boolean; slice: (start?: number, end?: number) => (string | number | boolean)[]; sort: (compareFn?: (a: string | number | boolean, b: string | number | boolean) => number) => [boolean, string, number]; splice: { (start: number, deleteCount?: number): (string | number | boolean)[]; (start: number, deleteCount: number, ...items: (string | number | boolean)[]): (string | number | boolean)[]; }; unshift: (...items: (string | number | boolean)[]) => number; indexOf: (searchElement: string | number | boolean, fromIndex?: number) => number; lastIndexOf: (searchElement: string | number | boolean, fromIndex?: number) => number; every: { <S extends string | number | boolean>(predicate: (value: string | number | boolean, index: number, array: (string | number | boolean)[]) => value is S, thisArg?: any): this is S[]; (predicate: (value: string | number | boolean, index: number, array: (string | number | boolean)[]) => unknown, thisArg?: any): boolean; }; some: (predicate: (value: string | number | boolean, index: number, array: (string | number | boolean)[]) => unknown, thisArg?: any) => boolean; forEach: (callbackfn: (value: string | number | boolean, index: number, array: (string | number | boolean)[]) => void, thisArg?: any) => void; map: <U>(callbackfn: (value: string | number | boolean, index: number, array: (string | number | boolean)[]) => U, thisArg?: any) => U[]; filter: { <S extends string | number | boolean>(predicate: (value: string | number | boolean, index: number, array: (string | number | boolean)[]) => value is S, thisArg?: any): S[]; (predicate: (value: string | number | boolean, index: number, array: (string | number | boolean)[]) => unknown, thisArg?: any): (string | number | boolean)[]; }; reduce: { (callbackfn: (previousValue: string | number | boolean, currentValue: string | number | boolean, currentIndex: number, array: (string | number | boolean)[]) => string | number | boolean): string | number | boolean; (callbackfn: (previousValue: string | number | boolean, currentValue: string | number | boolean, currentIndex: number, array: (string | number | boolean)[]) => string | number | boolean, initialValue: string | number | boolean): string | number | boolean; <U>(callbackfn: (previousValue: U, currentValue: string | number | boolean, currentIndex: number, array: (string | number | boolean)[]) => U, initialValue: U): U; }; reduceRight: { (callbackfn: (previousValue: string | number | boolean, currentValue: string | number | boolean, currentIndex: number, array: (string | number | boolean)[]) => string | number | boolean): string | number | boolean; (callbackfn: (previousValue: string | number | boolean, currentValue: string | number | boolean, currentIndex: number, array: (string | number | boolean)[]) => string | number | boolean, initialValue: string | number | boolean): string | number | boolean; <U>(callbackfn: (previousValue: U, currentValue: string | number | boolean, currentIndex: number, array: (string | number | boolean)[]) => U, initialValue: U): U; }; length: 3; }
 
diff --git a/testdata/baselines/reference/submodule/compiler/restParameterWithBindingPattern3.types.diff b/testdata/baselines/reference/submodule/compiler/restParameterWithBindingPattern3.types.diff
index 18d9433813..93e74a321f 100644
--- a/testdata/baselines/reference/submodule/compiler/restParameterWithBindingPattern3.types.diff
+++ b/testdata/baselines/reference/submodule/compiler/restParameterWithBindingPattern3.types.diff
@@ -41,5 +41,5 @@
  >true : true
  >rest : any
 ->rest : { [n: number]: string | number | boolean; 0: boolean; 1: string; 2: number; length: 3; toString(): string; toLocaleString(): string; pop(): string | number | boolean; push(...items: (string | number | boolean)[]): number; concat(...items: ConcatArray<string | number | boolean>[]): (string | number | boolean)[]; concat(...items: (string | number | boolean | ConcatArray<string | number | boolean>)[]): (string | number | boolean)[]; join(separator?: string): string; reverse(): (string | number | boolean)[]; shift(): string | number | boolean; slice(start?: number, end?: number): (string | number | boolean)[]; sort(compareFn?: (a: string | number | boolean, b: string | number | boolean) => number): [boolean, string, number]; splice(start: number, deleteCount?: number): (string | number | boolean)[]; splice(start: number, deleteCount: number, ...items: (string | number | boolean)[]): (string | number | boolean)[]; unshift(...items: (string | number | boolean)[]): number; indexOf(searchElement: string | number | boolean, fromIndex?: number): number; lastIndexOf(searchElement: string | number | boolean, fromIndex?: number): number; every<S extends string | number | boolean>(predicate: (value: string | number | boolean, index: number, array: (string | number | boolean)[]) => value is S, thisArg?: any): this is S[]; every(predicate: (value: string | number | boolean, index: number, array: (string | number | boolean)[]) => unknown, thisArg?: any): boolean; some(predicate: (value: string | number | boolean, index: number, array: (string | number | boolean)[]) => unknown, thisArg?: any): boolean; forEach(callbackfn: (value: string | number | boolean, index: number, array: (string | number | boolean)[]) => void, thisArg?: any): void; map<U>(callbackfn: (value: string | number | boolean, index: number, array: (string | number | boolean)[]) => U, thisArg?: any): U[]; filter<S extends string | number | boolean>(predicate: (value: string | number | boolean, index: number, array: (string | number | boolean)[]) => value is S, thisArg?: any): S[]; filter(predicate: (value: string | number | boolean, index: number, array: (string | number | boolean)[]) => unknown, thisArg?: any): (string | number | boolean)[]; reduce(callbackfn: (previousValue: string | number | boolean, currentValue: string | number | boolean, currentIndex: number, array: (string | number | boolean)[]) => string | number | boolean): string | number | boolean; reduce(callbackfn: (previousValue: string | number | boolean, currentValue: string | number | boolean, currentIndex: number, array: (string | number | boolean)[]) => string | number | boolean, initialValue: string | number | boolean): string | number | boolean; reduce<U>(callbackfn: (previousValue: U, currentValue: string | number | boolean, currentIndex: number, array: (string | number | boolean)[]) => U, initialValue: U): U; reduceRight(callbackfn: (previousValue: string | number | boolean, currentValue: string | number | boolean, currentIndex: number, array: (string | number | boolean)[]) => string | number | boolean): string | number | boolean; reduceRight(callbackfn: (previousValue: string | number | boolean, currentValue: string | number | boolean, currentIndex: number, array: (string | number | boolean)[]) => string | number | boolean, initialValue: string | number | boolean): string | number | boolean; reduceRight<U>(callbackfn: (previousValue: U, currentValue: string | number | boolean, currentIndex: number, array: (string | number | boolean)[]) => U, initialValue: U): U; }
-+>rest : { [n: number]: string | number | boolean; toString: () => string; toLocaleString: () => string; pop: () => string | number | boolean; push: (...items: (string | number | boolean)[]) => number; concat: { (...items: ConcatArray<string | number | boolean>[]): (string | number | boolean)[]; (...items: (string | number | boolean | ConcatArray<string | number | boolean>)[]): (string | number | boolean)[]; }; join: (separator?: string) => string; reverse: () => (string | number | boolean)[]; shift: () => string | number | boolean; slice: (start?: number, end?: number) => (string | number | boolean)[]; sort: (compareFn?: (a: string | number | boolean, b: string | number | boolean) => number) => [boolean, string, number]; splice: { (start: number, deleteCount?: number): (string | number | boolean)[]; (start: number, deleteCount: number, ...items: (string | number | boolean)[]): (string | number | boolean)[]; }; unshift: (...items: (string | number | boolean)[]) => number; indexOf: (searchElement: string | number | boolean, fromIndex?: number) => number; lastIndexOf: (searchElement: string | number | boolean, fromIndex?: number) => number; every: { <S extends string | number | boolean>(predicate: (value: string | number | boolean, index: number, array: (string | number | boolean)[]) => value is S, thisArg?: any): this is S[]; (predicate: (value: string | number | boolean, index: number, array: (string | number | boolean)[]) => unknown, thisArg?: any): boolean; }; some: (predicate: (value: string | number | boolean, index: number, array: (string | number | boolean)[]) => unknown, thisArg?: any) => boolean; forEach: (callbackfn: (value: string | number | boolean, index: number, array: (string | number | boolean)[]) => void, thisArg?: any) => void; map: <U>(callbackfn: (value: string | number | boolean, index: number, array: (string | number | boolean)[]) => U, thisArg?: any) => U[]; filter: { <S extends string | number | boolean>(predicate: (value: string | number | boolean, index: number, array: (string | number | boolean)[]) => value is S, thisArg?: any): S[]; (predicate: (value: string | number | boolean, index: number, array: (string | number | boolean)[]) => unknown, thisArg?: any): (string | number | boolean)[]; }; reduce: { (callbackfn: (previousValue: string | number | boolean, currentValue: string | number | boolean, currentIndex: number, array: (string | number | boolean)[]) => string | number | boolean): string | number | boolean; (callbackfn: (previousValue: string | number | boolean, currentValue: string | number | boolean, currentIndex: number, array: (string | number | boolean)[]) => string | number | boolean, initialValue: string | number | boolean): string | number | boolean; <U>(callbackfn: (previousValue: U, currentValue: string | number | boolean, currentIndex: number, array: (string | number | boolean)[]) => U, initialValue: U): U; }; reduceRight: { (callbackfn: (previousValue: string | number | boolean, currentValue: string | number | boolean, currentIndex: number, array: (string | number | boolean)[]) => string | number | boolean): string | number | boolean; (callbackfn: (previousValue: string | number | boolean, currentValue: string | number | boolean, currentIndex: number, array: (string | number | boolean)[]) => string | number | boolean, initialValue: string | number | boolean): string | number | boolean; <U>(callbackfn: (previousValue: U, currentValue: string | number | boolean, currentIndex: number, array: (string | number | boolean)[]) => U, initialValue: U): U; }; 0: boolean; 1: string; 2: number; length: 3; }
++>rest : { [n: number]: string | number | boolean; 0: boolean; 1: string; 2: number; toString: () => string; toLocaleString: () => string; pop: () => string | number | boolean; push: (...items: (string | number | boolean)[]) => number; concat: { (...items: ConcatArray<string | number | boolean>[]): (string | number | boolean)[]; (...items: (string | number | boolean | ConcatArray<string | number | boolean>)[]): (string | number | boolean)[]; }; join: (separator?: string) => string; reverse: () => (string | number | boolean)[]; shift: () => string | number | boolean; slice: (start?: number, end?: number) => (string | number | boolean)[]; sort: (compareFn?: (a: string | number | boolean, b: string | number | boolean) => number) => [boolean, string, number]; splice: { (start: number, deleteCount?: number): (string | number | boolean)[]; (start: number, deleteCount: number, ...items: (string | number | boolean)[]): (string | number | boolean)[]; }; unshift: (...items: (string | number | boolean)[]) => number; indexOf: (searchElement: string | number | boolean, fromIndex?: number) => number; lastIndexOf: (searchElement: string | number | boolean, fromIndex?: number) => number; every: { <S extends string | number | boolean>(predicate: (value: string | number | boolean, index: number, array: (string | number | boolean)[]) => value is S, thisArg?: any): this is S[]; (predicate: (value: string | number | boolean, index: number, array: (string | number | boolean)[]) => unknown, thisArg?: any): boolean; }; some: (predicate: (value: string | number | boolean, index: number, array: (string | number | boolean)[]) => unknown, thisArg?: any) => boolean; forEach: (callbackfn: (value: string | number | boolean, index: number, array: (string | number | boolean)[]) => void, thisArg?: any) => void; map: <U>(callbackfn: (value: string | number | boolean, index: number, array: (string | number | boolean)[]) => U, thisArg?: any) => U[]; filter: { <S extends string | number | boolean>(predicate: (value: string | number | boolean, index: number, array: (string | number | boolean)[]) => value is S, thisArg?: any): S[]; (predicate: (value: string | number | boolean, index: number, array: (string | number | boolean)[]) => unknown, thisArg?: any): (string | number | boolean)[]; }; reduce: { (callbackfn: (previousValue: string | number | boolean, currentValue: string | number | boolean, currentIndex: number, array: (string | number | boolean)[]) => string | number | boolean): string | number | boolean; (callbackfn: (previousValue: string | number | boolean, currentValue: string | number | boolean, currentIndex: number, array: (string | number | boolean)[]) => string | number | boolean, initialValue: string | number | boolean): string | number | boolean; <U>(callbackfn: (previousValue: U, currentValue: string | number | boolean, currentIndex: number, array: (string | number | boolean)[]) => U, initialValue: U): U; }; reduceRight: { (callbackfn: (previousValue: string | number | boolean, currentValue: string | number | boolean, currentIndex: number, array: (string | number | boolean)[]) => string | number | boolean): string | number | boolean; (callbackfn: (previousValue: string | number | boolean, currentValue: string | number | boolean, currentIndex: number, array: (string | number | boolean)[]) => string | number | boolean, initialValue: string | number | boolean): string | number | boolean; <U>(callbackfn: (previousValue: U, currentValue: string | number | boolean, currentIndex: number, array: (string | number | boolean)[]) => U, initialValue: U): U; }; length: 3; }
  
diff --git a/testdata/baselines/reference/submodule/conformance/arityAndOrderCompatibility01.errors.txt b/testdata/baselines/reference/submodule/conformance/arityAndOrderCompatibility01.errors.txt
index bfbebbfbef..b92d786b1c 100644
--- a/testdata/baselines/reference/submodule/conformance/arityAndOrderCompatibility01.errors.txt
+++ b/testdata/baselines/reference/submodule/conformance/arityAndOrderCompatibility01.errors.txt
@@ -11,9 +11,8 @@ arityAndOrderCompatibility01.ts(23,5): error TS2322: Type '{ 0: string; 1: numbe
 arityAndOrderCompatibility01.ts(24,5): error TS2322: Type '[string, number]' is not assignable to type '[number]'.
   Source has 2 element(s) but target allows only 1.
 arityAndOrderCompatibility01.ts(25,5): error TS2322: Type 'StrNum' is not assignable to type '[number]'.
-  The types returned by 'pop()' are incompatible between these types.
-    Type 'string | number' is not assignable to type 'number'.
-      Type 'string' is not assignable to type 'number'.
+  Types of property '0' are incompatible.
+    Type 'string' is not assignable to type 'number'.
 arityAndOrderCompatibility01.ts(26,5): error TS2322: Type '{ 0: string; 1: number; length: 2; }' is not assignable to type '[number]'.
 arityAndOrderCompatibility01.ts(27,5): error TS2322: Type '[string, number]' is not assignable to type '[string]'.
   Source has 2 element(s) but target allows only 1.
@@ -80,9 +79,8 @@ arityAndOrderCompatibility01.ts(32,5): error TS2322: Type '{ 0: string; 1: numbe
     var l2: [number] = y;
         ~~
 !!! error TS2322: Type 'StrNum' is not assignable to type '[number]'.
-!!! error TS2322:   The types returned by 'pop()' are incompatible between these types.
-!!! error TS2322:     Type 'string | number' is not assignable to type 'number'.
-!!! error TS2322:       Type 'string' is not assignable to type 'number'.
+!!! error TS2322:   Types of property '0' are incompatible.
+!!! error TS2322:     Type 'string' is not assignable to type 'number'.
     var l3: [number] = z;
         ~~
 !!! error TS2322: Type '{ 0: string; 1: number; length: 2; }' is not assignable to type '[number]'.
diff --git a/testdata/baselines/reference/submodule/conformance/arityAndOrderCompatibility01.errors.txt.diff b/testdata/baselines/reference/submodule/conformance/arityAndOrderCompatibility01.errors.txt.diff
index 238c42e77c..7ed7b34707 100644
--- a/testdata/baselines/reference/submodule/conformance/arityAndOrderCompatibility01.errors.txt.diff
+++ b/testdata/baselines/reference/submodule/conformance/arityAndOrderCompatibility01.errors.txt.diff
@@ -1,15 +1,6 @@
 --- old.arityAndOrderCompatibility01.errors.txt
 +++ new.arityAndOrderCompatibility01.errors.txt
-@@= skipped -10, +10 lines =@@
- arityAndOrderCompatibility01.ts(24,5): error TS2322: Type '[string, number]' is not assignable to type '[number]'.
-   Source has 2 element(s) but target allows only 1.
- arityAndOrderCompatibility01.ts(25,5): error TS2322: Type 'StrNum' is not assignable to type '[number]'.
--  Types of property '0' are incompatible.
--    Type 'string' is not assignable to type 'number'.
-+  The types returned by 'pop()' are incompatible between these types.
-+    Type 'string | number' is not assignable to type 'number'.
-+      Type 'string' is not assignable to type 'number'.
- arityAndOrderCompatibility01.ts(26,5): error TS2322: Type '{ 0: string; 1: number; length: 2; }' is not assignable to type '[number]'.
+@@= skipped -16, +16 lines =@@
  arityAndOrderCompatibility01.ts(27,5): error TS2322: Type '[string, number]' is not assignable to type '[string]'.
    Source has 2 element(s) but target allows only 1.
  arityAndOrderCompatibility01.ts(28,5): error TS2322: Type 'StrNum' is not assignable to type '[string]'.
@@ -21,19 +12,7 @@
  arityAndOrderCompatibility01.ts(29,5): error TS2322: Type '{ 0: string; 1: number; length: 2; }' is not assignable to type '[string]'.
  arityAndOrderCompatibility01.ts(30,5): error TS2322: Type '[string, number]' is not assignable to type '[number, string]'.
    Type at position 0 in source is not compatible with type at position 0 in target.
-@@= skipped -67, +69 lines =@@
-     var l2: [number] = y;
-         ~~
- !!! error TS2322: Type 'StrNum' is not assignable to type '[number]'.
--!!! error TS2322:   Types of property '0' are incompatible.
--!!! error TS2322:     Type 'string' is not assignable to type 'number'.
-+!!! error TS2322:   The types returned by 'pop()' are incompatible between these types.
-+!!! error TS2322:     Type 'string | number' is not assignable to type 'number'.
-+!!! error TS2322:       Type 'string' is not assignable to type 'number'.
-     var l3: [number] = z;
-         ~~
- !!! error TS2322: Type '{ 0: string; 1: number; length: 2; }' is not assignable to type '[number]'.
-@@= skipped -12, +13 lines =@@
+@@= skipped -73, +74 lines =@@
      var m2: [string] = y;
          ~~
  !!! error TS2322: Type 'StrNum' is not assignable to type '[string]'.
diff --git a/testdata/baselines/reference/submodule/conformance/computedPropertyNames10_ES5.types b/testdata/baselines/reference/submodule/conformance/computedPropertyNames10_ES5.types
index 92c4dbaf42..98c3d551f4 100644
--- a/testdata/baselines/reference/submodule/conformance/computedPropertyNames10_ES5.types
+++ b/testdata/baselines/reference/submodule/conformance/computedPropertyNames10_ES5.types
@@ -11,8 +11,8 @@ var a: any;
 >a : any
 
 var v = {
->v : { [x: string]: () => void; [x: number]: () => void; [""]: () => void; [0]: () => void; [`hello bye`]: () => void; }
->{    [s]() { },    [n]() { },    [s + s]() { },    [s + n]() { },    [+s]() { },    [""]() { },    [0]() { },    [a]() { },    [<any>true]() { },    [`hello bye`]() { },    [`hello ${a} bye`]() { }} : { [x: string]: () => void; [x: number]: () => void; [""]: () => void; [0]: () => void; [`hello bye`]: () => void; }
+>v : { [x: string]: () => void; [x: number]: () => void; [0]: () => void; [""]: () => void; [`hello bye`]: () => void; }
+>{    [s]() { },    [n]() { },    [s + s]() { },    [s + n]() { },    [+s]() { },    [""]() { },    [0]() { },    [a]() { },    [<any>true]() { },    [`hello bye`]() { },    [`hello ${a} bye`]() { }} : { [x: string]: () => void; [x: number]: () => void; [0]: () => void; [""]: () => void; [`hello bye`]: () => void; }
 
     [s]() { },
 >[s] : () => void
diff --git a/testdata/baselines/reference/submodule/conformance/computedPropertyNames10_ES5.types.diff b/testdata/baselines/reference/submodule/conformance/computedPropertyNames10_ES5.types.diff
index fd25b3b8e2..b08b2b6fa1 100644
--- a/testdata/baselines/reference/submodule/conformance/computedPropertyNames10_ES5.types.diff
+++ b/testdata/baselines/reference/submodule/conformance/computedPropertyNames10_ES5.types.diff
@@ -6,8 +6,8 @@
  var v = {
 ->v : { [x: string]: () => void; [x: number]: () => void; ""(): void; 0(): void; "hello bye"(): void; }
 ->{    [s]() { },    [n]() { },    [s + s]() { },    [s + n]() { },    [+s]() { },    [""]() { },    [0]() { },    [a]() { },    [<any>true]() { },    [`hello bye`]() { },    [`hello ${a} bye`]() { }} : { [x: string]: () => void; [x: number]: () => void; ""(): void; 0(): void; "hello bye"(): void; }
-+>v : { [x: string]: () => void; [x: number]: () => void; [""]: () => void; [0]: () => void; [`hello bye`]: () => void; }
-+>{    [s]() { },    [n]() { },    [s + s]() { },    [s + n]() { },    [+s]() { },    [""]() { },    [0]() { },    [a]() { },    [<any>true]() { },    [`hello bye`]() { },    [`hello ${a} bye`]() { }} : { [x: string]: () => void; [x: number]: () => void; [""]: () => void; [0]: () => void; [`hello bye`]: () => void; }
++>v : { [x: string]: () => void; [x: number]: () => void; [0]: () => void; [""]: () => void; [`hello bye`]: () => void; }
++>{    [s]() { },    [n]() { },    [s + s]() { },    [s + n]() { },    [+s]() { },    [""]() { },    [0]() { },    [a]() { },    [<any>true]() { },    [`hello bye`]() { },    [`hello ${a} bye`]() { }} : { [x: string]: () => void; [x: number]: () => void; [0]: () => void; [""]: () => void; [`hello bye`]: () => void; }
  
      [s]() { },
  >[s] : () => void
diff --git a/testdata/baselines/reference/submodule/conformance/computedPropertyNames10_ES6.types b/testdata/baselines/reference/submodule/conformance/computedPropertyNames10_ES6.types
index 65895cfb7e..c74620a69a 100644
--- a/testdata/baselines/reference/submodule/conformance/computedPropertyNames10_ES6.types
+++ b/testdata/baselines/reference/submodule/conformance/computedPropertyNames10_ES6.types
@@ -11,8 +11,8 @@ var a: any;
 >a : any
 
 var v = {
->v : { [x: string]: () => void; [x: number]: () => void; [""]: () => void; [0]: () => void; [`hello bye`]: () => void; }
->{    [s]() { },    [n]() { },    [s + s]() { },    [s + n]() { },    [+s]() { },    [""]() { },    [0]() { },    [a]() { },    [<any>true]() { },    [`hello bye`]() { },    [`hello ${a} bye`]() { }} : { [x: string]: () => void; [x: number]: () => void; [""]: () => void; [0]: () => void; [`hello bye`]: () => void; }
+>v : { [x: string]: () => void; [x: number]: () => void; [0]: () => void; [""]: () => void; [`hello bye`]: () => void; }
+>{    [s]() { },    [n]() { },    [s + s]() { },    [s + n]() { },    [+s]() { },    [""]() { },    [0]() { },    [a]() { },    [<any>true]() { },    [`hello bye`]() { },    [`hello ${a} bye`]() { }} : { [x: string]: () => void; [x: number]: () => void; [0]: () => void; [""]: () => void; [`hello bye`]: () => void; }
 
     [s]() { },
 >[s] : () => void
diff --git a/testdata/baselines/reference/submodule/conformance/computedPropertyNames10_ES6.types.diff b/testdata/baselines/reference/submodule/conformance/computedPropertyNames10_ES6.types.diff
index 46b44c6751..130d034fce 100644
--- a/testdata/baselines/reference/submodule/conformance/computedPropertyNames10_ES6.types.diff
+++ b/testdata/baselines/reference/submodule/conformance/computedPropertyNames10_ES6.types.diff
@@ -6,8 +6,8 @@
  var v = {
 ->v : { [x: string]: () => void; [x: number]: () => void; ""(): void; 0(): void; "hello bye"(): void; }
 ->{    [s]() { },    [n]() { },    [s + s]() { },    [s + n]() { },    [+s]() { },    [""]() { },    [0]() { },    [a]() { },    [<any>true]() { },    [`hello bye`]() { },    [`hello ${a} bye`]() { }} : { [x: string]: () => void; [x: number]: () => void; ""(): void; 0(): void; "hello bye"(): void; }
-+>v : { [x: string]: () => void; [x: number]: () => void; [""]: () => void; [0]: () => void; [`hello bye`]: () => void; }
-+>{    [s]() { },    [n]() { },    [s + s]() { },    [s + n]() { },    [+s]() { },    [""]() { },    [0]() { },    [a]() { },    [<any>true]() { },    [`hello bye`]() { },    [`hello ${a} bye`]() { }} : { [x: string]: () => void; [x: number]: () => void; [""]: () => void; [0]: () => void; [`hello bye`]: () => void; }
++>v : { [x: string]: () => void; [x: number]: () => void; [0]: () => void; [""]: () => void; [`hello bye`]: () => void; }
++>{    [s]() { },    [n]() { },    [s + s]() { },    [s + n]() { },    [+s]() { },    [""]() { },    [0]() { },    [a]() { },    [<any>true]() { },    [`hello bye`]() { },    [`hello ${a} bye`]() { }} : { [x: string]: () => void; [x: number]: () => void; [0]: () => void; [""]: () => void; [`hello bye`]: () => void; }
  
      [s]() { },
  >[s] : () => void
diff --git a/testdata/baselines/reference/submodule/conformance/computedPropertyNames11_ES5.types b/testdata/baselines/reference/submodule/conformance/computedPropertyNames11_ES5.types
index 09bbef3b35..e30deb5290 100644
--- a/testdata/baselines/reference/submodule/conformance/computedPropertyNames11_ES5.types
+++ b/testdata/baselines/reference/submodule/conformance/computedPropertyNames11_ES5.types
@@ -11,8 +11,8 @@ var a: any;
 >a : any
 
 var v = {
->v : { [x: string]: any; [x: number]: any; [""]: any; readonly [0]: number; [`hello bye`]: any; }
->{    get [s]() { return 0; },    set [n](v) { },    get [s + s]() { return 0; },    set [s + n](v) { },    get [+s]() { return 0; },    set [""](v) { },    get [0]() { return 0; },    set [a](v) { },    get [<any>true]() { return 0; },    set [`hello bye`](v) { },    get [`hello ${a} bye`]() { return 0; }} : { [x: string]: any; [x: number]: any; [""]: any; readonly [0]: number; [`hello bye`]: any; }
+>v : { [x: string]: any; [x: number]: any; readonly [0]: number; [""]: any; [`hello bye`]: any; }
+>{    get [s]() { return 0; },    set [n](v) { },    get [s + s]() { return 0; },    set [s + n](v) { },    get [+s]() { return 0; },    set [""](v) { },    get [0]() { return 0; },    set [a](v) { },    get [<any>true]() { return 0; },    set [`hello bye`](v) { },    get [`hello ${a} bye`]() { return 0; }} : { [x: string]: any; [x: number]: any; readonly [0]: number; [""]: any; [`hello bye`]: any; }
 
     get [s]() { return 0; },
 >[s] : number
diff --git a/testdata/baselines/reference/submodule/conformance/computedPropertyNames11_ES5.types.diff b/testdata/baselines/reference/submodule/conformance/computedPropertyNames11_ES5.types.diff
index c2c6fd44c5..62658860da 100644
--- a/testdata/baselines/reference/submodule/conformance/computedPropertyNames11_ES5.types.diff
+++ b/testdata/baselines/reference/submodule/conformance/computedPropertyNames11_ES5.types.diff
@@ -6,8 +6,8 @@
  var v = {
 ->v : { [x: string]: any; [x: number]: any; "": any; readonly 0: number; "hello bye": any; }
 ->{    get [s]() { return 0; },    set [n](v) { },    get [s + s]() { return 0; },    set [s + n](v) { },    get [+s]() { return 0; },    set [""](v) { },    get [0]() { return 0; },    set [a](v) { },    get [<any>true]() { return 0; },    set [`hello bye`](v) { },    get [`hello ${a} bye`]() { return 0; }} : { [x: string]: any; [x: number]: any; "": any; readonly 0: number; "hello bye": any; }
-+>v : { [x: string]: any; [x: number]: any; [""]: any; readonly [0]: number; [`hello bye`]: any; }
-+>{    get [s]() { return 0; },    set [n](v) { },    get [s + s]() { return 0; },    set [s + n](v) { },    get [+s]() { return 0; },    set [""](v) { },    get [0]() { return 0; },    set [a](v) { },    get [<any>true]() { return 0; },    set [`hello bye`](v) { },    get [`hello ${a} bye`]() { return 0; }} : { [x: string]: any; [x: number]: any; [""]: any; readonly [0]: number; [`hello bye`]: any; }
++>v : { [x: string]: any; [x: number]: any; readonly [0]: number; [""]: any; [`hello bye`]: any; }
++>{    get [s]() { return 0; },    set [n](v) { },    get [s + s]() { return 0; },    set [s + n](v) { },    get [+s]() { return 0; },    set [""](v) { },    get [0]() { return 0; },    set [a](v) { },    get [<any>true]() { return 0; },    set [`hello bye`](v) { },    get [`hello ${a} bye`]() { return 0; }} : { [x: string]: any; [x: number]: any; readonly [0]: number; [""]: any; [`hello bye`]: any; }
  
      get [s]() { return 0; },
  >[s] : number
diff --git a/testdata/baselines/reference/submodule/conformance/computedPropertyNames11_ES6.types b/testdata/baselines/reference/submodule/conformance/computedPropertyNames11_ES6.types
index 71d06116fa..7369a66b0b 100644
--- a/testdata/baselines/reference/submodule/conformance/computedPropertyNames11_ES6.types
+++ b/testdata/baselines/reference/submodule/conformance/computedPropertyNames11_ES6.types
@@ -11,8 +11,8 @@ var a: any;
 >a : any
 
 var v = {
->v : { [x: string]: any; [x: number]: any; [""]: any; readonly [0]: number; [`hello bye`]: any; }
->{    get [s]() { return 0; },    set [n](v) { },    get [s + s]() { return 0; },    set [s + n](v) { },    get [+s]() { return 0; },    set [""](v) { },    get [0]() { return 0; },    set [a](v) { },    get [<any>true]() { return 0; },    set [`hello bye`](v) { },    get [`hello ${a} bye`]() { return 0; }} : { [x: string]: any; [x: number]: any; [""]: any; readonly [0]: number; [`hello bye`]: any; }
+>v : { [x: string]: any; [x: number]: any; readonly [0]: number; [""]: any; [`hello bye`]: any; }
+>{    get [s]() { return 0; },    set [n](v) { },    get [s + s]() { return 0; },    set [s + n](v) { },    get [+s]() { return 0; },    set [""](v) { },    get [0]() { return 0; },    set [a](v) { },    get [<any>true]() { return 0; },    set [`hello bye`](v) { },    get [`hello ${a} bye`]() { return 0; }} : { [x: string]: any; [x: number]: any; readonly [0]: number; [""]: any; [`hello bye`]: any; }
 
     get [s]() { return 0; },
 >[s] : number
diff --git a/testdata/baselines/reference/submodule/conformance/computedPropertyNames11_ES6.types.diff b/testdata/baselines/reference/submodule/conformance/computedPropertyNames11_ES6.types.diff
index 6612cd6afe..2c269551c0 100644
--- a/testdata/baselines/reference/submodule/conformance/computedPropertyNames11_ES6.types.diff
+++ b/testdata/baselines/reference/submodule/conformance/computedPropertyNames11_ES6.types.diff
@@ -6,8 +6,8 @@
  var v = {
 ->v : { [x: string]: any; [x: number]: any; "": any; readonly 0: number; "hello bye": any; }
 ->{    get [s]() { return 0; },    set [n](v) { },    get [s + s]() { return 0; },    set [s + n](v) { },    get [+s]() { return 0; },    set [""](v) { },    get [0]() { return 0; },    set [a](v) { },    get [<any>true]() { return 0; },    set [`hello bye`](v) { },    get [`hello ${a} bye`]() { return 0; }} : { [x: string]: any; [x: number]: any; "": any; readonly 0: number; "hello bye": any; }
-+>v : { [x: string]: any; [x: number]: any; [""]: any; readonly [0]: number; [`hello bye`]: any; }
-+>{    get [s]() { return 0; },    set [n](v) { },    get [s + s]() { return 0; },    set [s + n](v) { },    get [+s]() { return 0; },    set [""](v) { },    get [0]() { return 0; },    set [a](v) { },    get [<any>true]() { return 0; },    set [`hello bye`](v) { },    get [`hello ${a} bye`]() { return 0; }} : { [x: string]: any; [x: number]: any; [""]: any; readonly [0]: number; [`hello bye`]: any; }
++>v : { [x: string]: any; [x: number]: any; readonly [0]: number; [""]: any; [`hello bye`]: any; }
++>{    get [s]() { return 0; },    set [n](v) { },    get [s + s]() { return 0; },    set [s + n](v) { },    get [+s]() { return 0; },    set [""](v) { },    get [0]() { return 0; },    set [a](v) { },    get [<any>true]() { return 0; },    set [`hello bye`](v) { },    get [`hello ${a} bye`]() { return 0; }} : { [x: string]: any; [x: number]: any; readonly [0]: number; [""]: any; [`hello bye`]: any; }
  
      get [s]() { return 0; },
  >[s] : number
diff --git a/testdata/baselines/reference/submodule/conformance/computedPropertyNames4_ES5.types b/testdata/baselines/reference/submodule/conformance/computedPropertyNames4_ES5.types
index 62468f532a..908c47b617 100644
--- a/testdata/baselines/reference/submodule/conformance/computedPropertyNames4_ES5.types
+++ b/testdata/baselines/reference/submodule/conformance/computedPropertyNames4_ES5.types
@@ -11,8 +11,8 @@ var a: any;
 >a : any
 
 var v = {
->v : { [x: string]: string | number; [x: number]: string | number; [""]: number; [0]: number; [`hello bye`]: number; }
->{    [s]: 0,    [n]: n,    [s + s]: 1,    [s + n]: 2,    [+s]: s,    [""]: 0,    [0]: 0,    [a]: 1,    [<any>true]: 0,    [`hello bye`]: 0,    [`hello ${a} bye`]: 0} : { [x: string]: string | number; [x: number]: string | number; [""]: number; [0]: number; [`hello bye`]: number; }
+>v : { [x: string]: string | number; [x: number]: string | number; [0]: number; [""]: number; [`hello bye`]: number; }
+>{    [s]: 0,    [n]: n,    [s + s]: 1,    [s + n]: 2,    [+s]: s,    [""]: 0,    [0]: 0,    [a]: 1,    [<any>true]: 0,    [`hello bye`]: 0,    [`hello ${a} bye`]: 0} : { [x: string]: string | number; [x: number]: string | number; [0]: number; [""]: number; [`hello bye`]: number; }
 
     [s]: 0,
 >[s] : number
diff --git a/testdata/baselines/reference/submodule/conformance/computedPropertyNames4_ES5.types.diff b/testdata/baselines/reference/submodule/conformance/computedPropertyNames4_ES5.types.diff
index ee612019a4..73bb07f0b2 100644
--- a/testdata/baselines/reference/submodule/conformance/computedPropertyNames4_ES5.types.diff
+++ b/testdata/baselines/reference/submodule/conformance/computedPropertyNames4_ES5.types.diff
@@ -6,8 +6,8 @@
  var v = {
 ->v : { [x: string]: string | number; [x: number]: string | number; "": number; 0: number; "hello bye": number; }
 ->{    [s]: 0,    [n]: n,    [s + s]: 1,    [s + n]: 2,    [+s]: s,    [""]: 0,    [0]: 0,    [a]: 1,    [<any>true]: 0,    [`hello bye`]: 0,    [`hello ${a} bye`]: 0} : { [x: string]: string | number; [x: number]: string | number; "": number; 0: number; "hello bye": number; }
-+>v : { [x: string]: string | number; [x: number]: string | number; [""]: number; [0]: number; [`hello bye`]: number; }
-+>{    [s]: 0,    [n]: n,    [s + s]: 1,    [s + n]: 2,    [+s]: s,    [""]: 0,    [0]: 0,    [a]: 1,    [<any>true]: 0,    [`hello bye`]: 0,    [`hello ${a} bye`]: 0} : { [x: string]: string | number; [x: number]: string | number; [""]: number; [0]: number; [`hello bye`]: number; }
++>v : { [x: string]: string | number; [x: number]: string | number; [0]: number; [""]: number; [`hello bye`]: number; }
++>{    [s]: 0,    [n]: n,    [s + s]: 1,    [s + n]: 2,    [+s]: s,    [""]: 0,    [0]: 0,    [a]: 1,    [<any>true]: 0,    [`hello bye`]: 0,    [`hello ${a} bye`]: 0} : { [x: string]: string | number; [x: number]: string | number; [0]: number; [""]: number; [`hello bye`]: number; }
  
      [s]: 0,
  >[s] : number
diff --git a/testdata/baselines/reference/submodule/conformance/computedPropertyNames4_ES6.types b/testdata/baselines/reference/submodule/conformance/computedPropertyNames4_ES6.types
index 4fe31bd17c..977510dca7 100644
--- a/testdata/baselines/reference/submodule/conformance/computedPropertyNames4_ES6.types
+++ b/testdata/baselines/reference/submodule/conformance/computedPropertyNames4_ES6.types
@@ -11,8 +11,8 @@ var a: any;
 >a : any
 
 var v = {
->v : { [x: string]: string | number; [x: number]: string | number; [""]: number; [0]: number; [`hello bye`]: number; }
->{    [s]: 0,    [n]: n,    [s + s]: 1,    [s + n]: 2,    [+s]: s,    [""]: 0,    [0]: 0,    [a]: 1,    [<any>true]: 0,    [`hello bye`]: 0,    [`hello ${a} bye`]: 0} : { [x: string]: string | number; [x: number]: string | number; [""]: number; [0]: number; [`hello bye`]: number; }
+>v : { [x: string]: string | number; [x: number]: string | number; [0]: number; [""]: number; [`hello bye`]: number; }
+>{    [s]: 0,    [n]: n,    [s + s]: 1,    [s + n]: 2,    [+s]: s,    [""]: 0,    [0]: 0,    [a]: 1,    [<any>true]: 0,    [`hello bye`]: 0,    [`hello ${a} bye`]: 0} : { [x: string]: string | number; [x: number]: string | number; [0]: number; [""]: number; [`hello bye`]: number; }
 
     [s]: 0,
 >[s] : number
diff --git a/testdata/baselines/reference/submodule/conformance/computedPropertyNames4_ES6.types.diff b/testdata/baselines/reference/submodule/conformance/computedPropertyNames4_ES6.types.diff
index 7ea939f85e..a6426ba7b3 100644
--- a/testdata/baselines/reference/submodule/conformance/computedPropertyNames4_ES6.types.diff
+++ b/testdata/baselines/reference/submodule/conformance/computedPropertyNames4_ES6.types.diff
@@ -6,8 +6,8 @@
  var v = {
 ->v : { [x: string]: string | number; [x: number]: string | number; "": number; 0: number; "hello bye": number; }
 ->{    [s]: 0,    [n]: n,    [s + s]: 1,    [s + n]: 2,    [+s]: s,    [""]: 0,    [0]: 0,    [a]: 1,    [<any>true]: 0,    [`hello bye`]: 0,    [`hello ${a} bye`]: 0} : { [x: string]: string | number; [x: number]: string | number; "": number; 0: number; "hello bye": number; }
-+>v : { [x: string]: string | number; [x: number]: string | number; [""]: number; [0]: number; [`hello bye`]: number; }
-+>{    [s]: 0,    [n]: n,    [s + s]: 1,    [s + n]: 2,    [+s]: s,    [""]: 0,    [0]: 0,    [a]: 1,    [<any>true]: 0,    [`hello bye`]: 0,    [`hello ${a} bye`]: 0} : { [x: string]: string | number; [x: number]: string | number; [""]: number; [0]: number; [`hello bye`]: number; }
++>v : { [x: string]: string | number; [x: number]: string | number; [0]: number; [""]: number; [`hello bye`]: number; }
++>{    [s]: 0,    [n]: n,    [s + s]: 1,    [s + n]: 2,    [+s]: s,    [""]: 0,    [0]: 0,    [a]: 1,    [<any>true]: 0,    [`hello bye`]: 0,    [`hello ${a} bye`]: 0} : { [x: string]: string | number; [x: number]: string | number; [0]: number; [""]: number; [`hello bye`]: number; }
  
      [s]: 0,
  >[s] : number
diff --git a/testdata/baselines/reference/submodule/conformance/computedPropertyNamesContextualType6_ES5.types b/testdata/baselines/reference/submodule/conformance/computedPropertyNamesContextualType6_ES5.types
index aa04513b17..4286e552d2 100644
--- a/testdata/baselines/reference/submodule/conformance/computedPropertyNamesContextualType6_ES5.types
+++ b/testdata/baselines/reference/submodule/conformance/computedPropertyNamesContextualType6_ES5.types
@@ -17,7 +17,7 @@ declare function foo<T>(obj: I<T>): T
 foo({
 >foo({    p: "",    0: () => { },    ["hi" + "bye"]: true,    [0 + 1]: 0,    [+"hi"]: [0]}) : string | number | boolean | number[] | () => void
 >foo : <T>(obj: I<T>) => T
->{    p: "",    0: () => { },    ["hi" + "bye"]: true,    [0 + 1]: 0,    [+"hi"]: [0]} : { [x: string]: string | number | true | number[] | () => void; [x: number]: number | number[] | () => void; p: string; 0: () => void; }
+>{    p: "",    0: () => { },    ["hi" + "bye"]: true,    [0 + 1]: 0,    [+"hi"]: [0]} : { [x: string]: string | number | true | number[] | () => void; [x: number]: number | number[] | () => void; 0: () => void; p: string; }
 
     p: "",
 >p : string
diff --git a/testdata/baselines/reference/submodule/conformance/computedPropertyNamesContextualType6_ES5.types.diff b/testdata/baselines/reference/submodule/conformance/computedPropertyNamesContextualType6_ES5.types.diff
index aa05c69bc8..6669500f55 100644
--- a/testdata/baselines/reference/submodule/conformance/computedPropertyNamesContextualType6_ES5.types.diff
+++ b/testdata/baselines/reference/submodule/conformance/computedPropertyNamesContextualType6_ES5.types.diff
@@ -21,7 +21,7 @@
 +>foo({    p: "",    0: () => { },    ["hi" + "bye"]: true,    [0 + 1]: 0,    [+"hi"]: [0]}) : string | number | boolean | number[] | () => void
  >foo : <T>(obj: I<T>) => T
 ->{    p: "",    0: () => { },    ["hi" + "bye"]: true,    [0 + 1]: 0,    [+"hi"]: [0]} : { [x: string]: string | number | true | (() => void) | number[]; [x: number]: number | (() => void) | number[]; p: string; 0: () => void; }
-+>{    p: "",    0: () => { },    ["hi" + "bye"]: true,    [0 + 1]: 0,    [+"hi"]: [0]} : { [x: string]: string | number | true | number[] | () => void; [x: number]: number | number[] | () => void; p: string; 0: () => void; }
++>{    p: "",    0: () => { },    ["hi" + "bye"]: true,    [0 + 1]: 0,    [+"hi"]: [0]} : { [x: string]: string | number | true | number[] | () => void; [x: number]: number | number[] | () => void; 0: () => void; p: string; }
  
      p: "",
  >p : string
diff --git a/testdata/baselines/reference/submodule/conformance/computedPropertyNamesContextualType6_ES6.types b/testdata/baselines/reference/submodule/conformance/computedPropertyNamesContextualType6_ES6.types
index fffcc25f3b..b099e1ae4a 100644
--- a/testdata/baselines/reference/submodule/conformance/computedPropertyNamesContextualType6_ES6.types
+++ b/testdata/baselines/reference/submodule/conformance/computedPropertyNamesContextualType6_ES6.types
@@ -17,7 +17,7 @@ declare function foo<T>(obj: I<T>): T
 foo({
 >foo({    p: "",    0: () => { },    ["hi" + "bye"]: true,    [0 + 1]: 0,    [+"hi"]: [0]}) : string | number | boolean | number[] | () => void
 >foo : <T>(obj: I<T>) => T
->{    p: "",    0: () => { },    ["hi" + "bye"]: true,    [0 + 1]: 0,    [+"hi"]: [0]} : { [x: string]: string | number | true | number[] | () => void; [x: number]: number | number[] | () => void; p: string; 0: () => void; }
+>{    p: "",    0: () => { },    ["hi" + "bye"]: true,    [0 + 1]: 0,    [+"hi"]: [0]} : { [x: string]: string | number | true | number[] | () => void; [x: number]: number | number[] | () => void; 0: () => void; p: string; }
 
     p: "",
 >p : string
diff --git a/testdata/baselines/reference/submodule/conformance/computedPropertyNamesContextualType6_ES6.types.diff b/testdata/baselines/reference/submodule/conformance/computedPropertyNamesContextualType6_ES6.types.diff
index 1cdbbb2b13..d72c40d8a8 100644
--- a/testdata/baselines/reference/submodule/conformance/computedPropertyNamesContextualType6_ES6.types.diff
+++ b/testdata/baselines/reference/submodule/conformance/computedPropertyNamesContextualType6_ES6.types.diff
@@ -21,7 +21,7 @@
 +>foo({    p: "",    0: () => { },    ["hi" + "bye"]: true,    [0 + 1]: 0,    [+"hi"]: [0]}) : string | number | boolean | number[] | () => void
  >foo : <T>(obj: I<T>) => T
 ->{    p: "",    0: () => { },    ["hi" + "bye"]: true,    [0 + 1]: 0,    [+"hi"]: [0]} : { [x: string]: string | number | true | (() => void) | number[]; [x: number]: number | (() => void) | number[]; p: string; 0: () => void; }
-+>{    p: "",    0: () => { },    ["hi" + "bye"]: true,    [0 + 1]: 0,    [+"hi"]: [0]} : { [x: string]: string | number | true | number[] | () => void; [x: number]: number | number[] | () => void; p: string; 0: () => void; }
++>{    p: "",    0: () => { },    ["hi" + "bye"]: true,    [0 + 1]: 0,    [+"hi"]: [0]} : { [x: string]: string | number | true | number[] | () => void; [x: number]: number | number[] | () => void; 0: () => void; p: string; }
  
      p: "",
  >p : string
diff --git a/testdata/baselines/reference/submodule/conformance/emitCompoundExponentiationAssignmentWithIndexingOnLHS3.types b/testdata/baselines/reference/submodule/conformance/emitCompoundExponentiationAssignmentWithIndexingOnLHS3.types
index 51140ff2ad..b8a6096a44 100644
--- a/testdata/baselines/reference/submodule/conformance/emitCompoundExponentiationAssignmentWithIndexingOnLHS3.types
+++ b/testdata/baselines/reference/submodule/conformance/emitCompoundExponentiationAssignmentWithIndexingOnLHS3.types
@@ -2,8 +2,8 @@
 
 === emitCompoundExponentiationAssignmentWithIndexingOnLHS3.ts ===
 var object = {
->object : { _0: number; 0: number; }
->{    _0: 2,    get 0() {        return this._0;    },    set 0(x: number) {        this._0 = x;    },} : { _0: number; 0: number; }
+>object : { 0: number; _0: number; }
+>{    _0: 2,    get 0() {        return this._0;    },    set 0(x: number) {        this._0 = x;    },} : { 0: number; _0: number; }
 
     _0: 2,
 >_0 : number
@@ -34,31 +34,31 @@ var object = {
 object[0] **= object[0];
 >object[0] **= object[0] : number
 >object[0] : number
->object : { _0: number; 0: number; }
+>object : { 0: number; _0: number; }
 >0 : 0
 >object[0] : number
->object : { _0: number; 0: number; }
+>object : { 0: number; _0: number; }
 >0 : 0
 
 object[0] **= object[0] **= 2;
 >object[0] **= object[0] **= 2 : number
 >object[0] : number
->object : { _0: number; 0: number; }
+>object : { 0: number; _0: number; }
 >0 : 0
 >object[0] **= 2 : number
 >object[0] : number
->object : { _0: number; 0: number; }
+>object : { 0: number; _0: number; }
 >0 : 0
 >2 : 2
 
 object[0] **= object[0] ** 2;
 >object[0] **= object[0] ** 2 : number
 >object[0] : number
->object : { _0: number; 0: number; }
+>object : { 0: number; _0: number; }
 >0 : 0
 >object[0] ** 2 : number
 >object[0] : number
->object : { _0: number; 0: number; }
+>object : { 0: number; _0: number; }
 >0 : 0
 >2 : 2
 
diff --git a/testdata/baselines/reference/submodule/conformance/emitCompoundExponentiationAssignmentWithIndexingOnLHS3.types.diff b/testdata/baselines/reference/submodule/conformance/emitCompoundExponentiationAssignmentWithIndexingOnLHS3.types.diff
new file mode 100644
index 0000000000..b408ca368c
--- /dev/null
+++ b/testdata/baselines/reference/submodule/conformance/emitCompoundExponentiationAssignmentWithIndexingOnLHS3.types.diff
@@ -0,0 +1,51 @@
+--- old.emitCompoundExponentiationAssignmentWithIndexingOnLHS3.types
++++ new.emitCompoundExponentiationAssignmentWithIndexingOnLHS3.types
+@@= skipped -1, +1 lines =@@
+ 
+ === emitCompoundExponentiationAssignmentWithIndexingOnLHS3.ts ===
+ var object = {
+->object : { _0: number; 0: number; }
+->{    _0: 2,    get 0() {        return this._0;    },    set 0(x: number) {        this._0 = x;    },} : { _0: number; 0: number; }
++>object : { 0: number; _0: number; }
++>{    _0: 2,    get 0() {        return this._0;    },    set 0(x: number) {        this._0 = x;    },} : { 0: number; _0: number; }
+ 
+     _0: 2,
+ >_0 : number
+@@= skipped -32, +32 lines =@@
+ object[0] **= object[0];
+ >object[0] **= object[0] : number
+ >object[0] : number
+->object : { _0: number; 0: number; }
++>object : { 0: number; _0: number; }
+ >0 : 0
+ >object[0] : number
+->object : { _0: number; 0: number; }
++>object : { 0: number; _0: number; }
+ >0 : 0
+ 
+ object[0] **= object[0] **= 2;
+ >object[0] **= object[0] **= 2 : number
+ >object[0] : number
+->object : { _0: number; 0: number; }
++>object : { 0: number; _0: number; }
+ >0 : 0
+ >object[0] **= 2 : number
+ >object[0] : number
+->object : { _0: number; 0: number; }
++>object : { 0: number; _0: number; }
+ >0 : 0
+ >2 : 2
+ 
+ object[0] **= object[0] ** 2;
+ >object[0] **= object[0] ** 2 : number
+ >object[0] : number
+->object : { _0: number; 0: number; }
++>object : { 0: number; _0: number; }
+ >0 : 0
+ >object[0] ** 2 : number
+ >object[0] : number
+->object : { _0: number; 0: number; }
++>object : { 0: number; _0: number; }
+ >0 : 0
+ >2 : 2
+ 
diff --git a/testdata/baselines/reference/submodule/conformance/importAttributes7.types b/testdata/baselines/reference/submodule/conformance/importAttributes7.types
index 9e5c8eac18..ee7321168a 100644
--- a/testdata/baselines/reference/submodule/conformance/importAttributes7.types
+++ b/testdata/baselines/reference/submodule/conformance/importAttributes7.types
@@ -2,7 +2,7 @@
 
 === /a.ts ===
 export default {
->{    a: "a",    b: "b",    1: "1",} : { a: string; b: string; 1: string; }
+>{    a: "a",    b: "b",    1: "1",} : { 1: string; a: string; b: string; }
 
     a: "a",
 >a : string
@@ -19,7 +19,7 @@ export default {
 
 === /b.ts ===
 import a from "./a" with { a: "a", "b": "b" };
->a : { a: string; b: string; 1: string; }
+>a : { 1: string; a: string; b: string; }
 >a : any
 
 export async function f() {
diff --git a/testdata/baselines/reference/submodule/conformance/importAttributes7.types.diff b/testdata/baselines/reference/submodule/conformance/importAttributes7.types.diff
index 34690d7dde..a8a6bc11f3 100644
--- a/testdata/baselines/reference/submodule/conformance/importAttributes7.types.diff
+++ b/testdata/baselines/reference/submodule/conformance/importAttributes7.types.diff
@@ -1,10 +1,21 @@
 --- old.importAttributes7.types
 +++ new.importAttributes7.types
-@@= skipped -19, +19 lines =@@
+@@= skipped -1, +1 lines =@@
+ 
+ === /a.ts ===
+ export default {
+->{    a: "a",    b: "b",    1: "1",} : { a: string; b: string; 1: string; }
++>{    a: "a",    b: "b",    1: "1",} : { 1: string; a: string; b: string; }
+ 
+     a: "a",
+ >a : string
+@@= skipped -17, +17 lines =@@
+ 
  === /b.ts ===
  import a from "./a" with { a: "a", "b": "b" };
- >a : { a: string; b: string; 1: string; }
+->a : { a: string; b: string; 1: string; }
 ->a : error
++>a : { 1: string; a: string; b: string; }
 +>a : any
  
  export async function f() {
diff --git a/testdata/baselines/reference/submodule/conformance/indexSignatures1.types b/testdata/baselines/reference/submodule/conformance/indexSignatures1.types
index b4be2ea8a4..49a89fbcb7 100644
--- a/testdata/baselines/reference/submodule/conformance/indexSignatures1.types
+++ b/testdata/baselines/reference/submodule/conformance/indexSignatures1.types
@@ -724,8 +724,8 @@ const obj12 = {
 };
 
 const obj13 = {
->obj13 : { [x: string]: 0 | 1 | 2 | 3; [x: number]: 2 | 3; [x: symbol]: 4 | 5; x: 0; [1]: 2; [sym]: 4; }
->{    ['x']: 0 as const,    ['a' + 'b']: 1 as const,    [1]: 2 as const,    [1 + 2]: 3 as const,    [sym]: 4 as const,    [Symbol()]: 5 as const,} : { [x: string]: 0 | 1 | 2 | 3; [x: number]: 2 | 3; [x: symbol]: 4 | 5; x: 0; [1]: 2; [sym]: 4; }
+>obj13 : { [x: string]: 0 | 1 | 2 | 3; [x: number]: 2 | 3; [x: symbol]: 4 | 5; [1]: 2; x: 0; [sym]: 4; }
+>{    ['x']: 0 as const,    ['a' + 'b']: 1 as const,    [1]: 2 as const,    [1 + 2]: 3 as const,    [sym]: 4 as const,    [Symbol()]: 5 as const,} : { [x: string]: 0 | 1 | 2 | 3; [x: number]: 2 | 3; [x: symbol]: 4 | 5; [1]: 2; x: 0; [sym]: 4; }
 
     ['x']: 0 as const,
 >['x'] : 0
diff --git a/testdata/baselines/reference/submodule/conformance/indexSignatures1.types.diff b/testdata/baselines/reference/submodule/conformance/indexSignatures1.types.diff
index 6c28b6e44a..c76306d3ea 100644
--- a/testdata/baselines/reference/submodule/conformance/indexSignatures1.types.diff
+++ b/testdata/baselines/reference/submodule/conformance/indexSignatures1.types.diff
@@ -58,8 +58,8 @@
  const obj13 = {
 ->obj13 : { [x: string]: 0 | 2 | 1 | 3; [x: number]: 2 | 3; [x: symbol]: 4 | 5; x: 0; 1: 2; [sym]: 4; }
 ->{    ['x']: 0 as const,    ['a' + 'b']: 1 as const,    [1]: 2 as const,    [1 + 2]: 3 as const,    [sym]: 4 as const,    [Symbol()]: 5 as const,} : { [x: string]: 0 | 2 | 1 | 3; [x: number]: 2 | 3; [x: symbol]: 4 | 5; x: 0; 1: 2; [sym]: 4; }
-+>obj13 : { [x: string]: 0 | 1 | 2 | 3; [x: number]: 2 | 3; [x: symbol]: 4 | 5; x: 0; [1]: 2; [sym]: 4; }
-+>{    ['x']: 0 as const,    ['a' + 'b']: 1 as const,    [1]: 2 as const,    [1 + 2]: 3 as const,    [sym]: 4 as const,    [Symbol()]: 5 as const,} : { [x: string]: 0 | 1 | 2 | 3; [x: number]: 2 | 3; [x: symbol]: 4 | 5; x: 0; [1]: 2; [sym]: 4; }
++>obj13 : { [x: string]: 0 | 1 | 2 | 3; [x: number]: 2 | 3; [x: symbol]: 4 | 5; [1]: 2; x: 0; [sym]: 4; }
++>{    ['x']: 0 as const,    ['a' + 'b']: 1 as const,    [1]: 2 as const,    [1 + 2]: 3 as const,    [sym]: 4 as const,    [Symbol()]: 5 as const,} : { [x: string]: 0 | 1 | 2 | 3; [x: number]: 2 | 3; [x: symbol]: 4 | 5; [1]: 2; x: 0; [sym]: 4; }
  
      ['x']: 0 as const,
  >['x'] : 0
diff --git a/testdata/baselines/reference/submodule/conformance/numericIndexerConstrainsPropertyDeclarations.types b/testdata/baselines/reference/submodule/conformance/numericIndexerConstrainsPropertyDeclarations.types
index 402eb02dfd..cbfb6cd5a4 100644
--- a/testdata/baselines/reference/submodule/conformance/numericIndexerConstrainsPropertyDeclarations.types
+++ b/testdata/baselines/reference/submodule/conformance/numericIndexerConstrainsPropertyDeclarations.types
@@ -127,7 +127,7 @@ interface I {
 }
 
 var a: {
->a : { (): string; (x: any): number; [x: number]: string; a: string; b: number; c: () => {}; d: string; e: number; 1.0: string; 2.0: number; foo: () => string; "3.0": string; "4.0": number; f: MyNumber; }
+>a : { (): string; (x: any): number; [x: number]: string; 1.0: string; 2.0: number; a: string; b: number; c: () => {}; d: string; e: number; foo: () => string; "3.0": string; "4.0": number; f: MyNumber; }
 
     [x: number]: string;
 >x : number
@@ -174,7 +174,7 @@ var a: {
 var b: { [x: number]: string; } = {
 >b : { [x: number]: string; }
 >x : number
->{    a: '',    b: 1,     c: () => { },     "d": '',     "e": 1,     1.0: '',    2.0: 1,     "3.0": '',     "4.0": 1,     f: <Myn>null,     get X() {         return '';    },    set X(v) { },     foo() {         return '';    }} : { a: string; b: number; c: () => void; d: string; e: number; 1.0: string; 2.0: number; "3.0": string; "4.0": number; f: Myn; X: string; foo: () => string; }
+>{    a: '',    b: 1,     c: () => { },     "d": '',     "e": 1,     1.0: '',    2.0: 1,     "3.0": '',     "4.0": 1,     f: <Myn>null,     get X() {         return '';    },    set X(v) { },     foo() {         return '';    }} : { 1.0: string; 2.0: number; a: string; b: number; c: () => void; d: string; e: number; "3.0": string; "4.0": number; f: Myn; X: string; foo: () => string; }
 
     a: '',
 >a : string
diff --git a/testdata/baselines/reference/submodule/conformance/numericIndexerConstrainsPropertyDeclarations.types.diff b/testdata/baselines/reference/submodule/conformance/numericIndexerConstrainsPropertyDeclarations.types.diff
index c5e86e12c6..42458c9aef 100644
--- a/testdata/baselines/reference/submodule/conformance/numericIndexerConstrainsPropertyDeclarations.types.diff
+++ b/testdata/baselines/reference/submodule/conformance/numericIndexerConstrainsPropertyDeclarations.types.diff
@@ -23,7 +23,7 @@
  
  var a: {
 ->a : { (): string; (x: any): number; [x: number]: string; a: string; b: number; c: () => {}; d: string; e: number; 1: string; 2: number; foo(): string; "3.0": string; "4.0": number; f: MyNumber; }
-+>a : { (): string; (x: any): number; [x: number]: string; a: string; b: number; c: () => {}; d: string; e: number; 1.0: string; 2.0: number; foo: () => string; "3.0": string; "4.0": number; f: MyNumber; }
++>a : { (): string; (x: any): number; [x: number]: string; 1.0: string; 2.0: number; a: string; b: number; c: () => {}; d: string; e: number; foo: () => string; "3.0": string; "4.0": number; f: MyNumber; }
  
      [x: number]: string;
  >x : number
@@ -32,7 +32,7 @@
  >b : { [x: number]: string; }
  >x : number
 ->{    a: '',    b: 1,     c: () => { },     "d": '',     "e": 1,     1.0: '',    2.0: 1,     "3.0": '',     "4.0": 1,     f: <Myn>null,     get X() {         return '';    },    set X(v) { },     foo() {         return '';    }} : { a: string; b: number; c: () => void; d: string; e: number; 1: string; 2: number; "3.0": string; "4.0": number; f: Myn; X: string; foo(): string; }
-+>{    a: '',    b: 1,     c: () => { },     "d": '',     "e": 1,     1.0: '',    2.0: 1,     "3.0": '',     "4.0": 1,     f: <Myn>null,     get X() {         return '';    },    set X(v) { },     foo() {         return '';    }} : { a: string; b: number; c: () => void; d: string; e: number; 1.0: string; 2.0: number; "3.0": string; "4.0": number; f: Myn; X: string; foo: () => string; }
++>{    a: '',    b: 1,     c: () => { },     "d": '',     "e": 1,     1.0: '',    2.0: 1,     "3.0": '',     "4.0": 1,     f: <Myn>null,     get X() {         return '';    },    set X(v) { },     foo() {         return '';    }} : { 1.0: string; 2.0: number; a: string; b: number; c: () => void; d: string; e: number; "3.0": string; "4.0": number; f: Myn; X: string; foo: () => string; }
  
      a: '',
  >a : string
diff --git a/testdata/baselines/reference/submodule/conformance/numericIndexerConstrainsPropertyDeclarations2.types b/testdata/baselines/reference/submodule/conformance/numericIndexerConstrainsPropertyDeclarations2.types
index 1e62dcd612..bf79722313 100644
--- a/testdata/baselines/reference/submodule/conformance/numericIndexerConstrainsPropertyDeclarations2.types
+++ b/testdata/baselines/reference/submodule/conformance/numericIndexerConstrainsPropertyDeclarations2.types
@@ -65,7 +65,7 @@ interface Foo2 {
 }
 
 var a: {
->a : { [x: number]: A; 1.0: A; 2.0: B; "2.5": B; 3.0: number; "4.0": string; }
+>a : { [x: number]: A; 1.0: A; 2.0: B; 3.0: number; "2.5": B; "4.0": string; }
 
     [x: number]: A;
 >x : number
@@ -91,7 +91,7 @@ var a: {
 var b: { [x: number]: A } = {
 >b : { [x: number]: A; }
 >x : number
->{    1.0: new A(),     2.0: new B(),     "2.5": new B(),    3.0: 1,    "4.0": ''} : { 1.0: A; 2.0: B; "2.5": B; 3.0: number; "4.0": string; }
+>{    1.0: new A(),     2.0: new B(),     "2.5": new B(),    3.0: 1,    "4.0": ''} : { 1.0: A; 2.0: B; 3.0: number; "2.5": B; "4.0": string; }
 
     1.0: new A(), 
 >1.0 : A
diff --git a/testdata/baselines/reference/submodule/conformance/numericIndexerConstrainsPropertyDeclarations2.types.diff b/testdata/baselines/reference/submodule/conformance/numericIndexerConstrainsPropertyDeclarations2.types.diff
index 790e58071c..87012463b2 100644
--- a/testdata/baselines/reference/submodule/conformance/numericIndexerConstrainsPropertyDeclarations2.types.diff
+++ b/testdata/baselines/reference/submodule/conformance/numericIndexerConstrainsPropertyDeclarations2.types.diff
@@ -14,7 +14,7 @@
  
  var a: {
 ->a : { [x: number]: A; 1: A; 2: B; "2.5": B; 3: number; "4.0": string; }
-+>a : { [x: number]: A; 1.0: A; 2.0: B; "2.5": B; 3.0: number; "4.0": string; }
++>a : { [x: number]: A; 1.0: A; 2.0: B; 3.0: number; "2.5": B; "4.0": string; }
  
      [x: number]: A;
  >x : number
@@ -23,7 +23,7 @@
  >b : { [x: number]: A; }
  >x : number
 ->{    1.0: new A(),     2.0: new B(),     "2.5": new B(),    3.0: 1,    "4.0": ''} : { 1: A; 2: B; "2.5": B; 3: number; "4.0": string; }
-+>{    1.0: new A(),     2.0: new B(),     "2.5": new B(),    3.0: 1,    "4.0": ''} : { 1.0: A; 2.0: B; "2.5": B; 3.0: number; "4.0": string; }
++>{    1.0: new A(),     2.0: new B(),     "2.5": new B(),    3.0: 1,    "4.0": ''} : { 1.0: A; 2.0: B; 3.0: number; "2.5": B; "4.0": string; }
  
      1.0: new A(), 
  >1.0 : A
diff --git a/testdata/baselines/reference/submodule/conformance/objectLiteralShorthandPropertiesErrorFromNotUsingIdentifier.types b/testdata/baselines/reference/submodule/conformance/objectLiteralShorthandPropertiesErrorFromNotUsingIdentifier.types
index d12fd3ed64..d017d72df3 100644
--- a/testdata/baselines/reference/submodule/conformance/objectLiteralShorthandPropertiesErrorFromNotUsingIdentifier.types
+++ b/testdata/baselines/reference/submodule/conformance/objectLiteralShorthandPropertiesErrorFromNotUsingIdentifier.types
@@ -3,8 +3,8 @@
 === objectLiteralShorthandPropertiesErrorFromNotUsingIdentifier.ts ===
 // errors
 var y = {
->y : { stringLiteral: any; 42: any; readonly e: void; f: any; this: any; super: any; var: any; class: any; typeof: any; }
->{    "stringLiteral",    42,    get e,    set f,    this,    super,    var,    class,    typeof} : { stringLiteral: any; 42: any; readonly e: void; f: any; this: any; super: any; var: any; class: any; typeof: any; }
+>y : { 42: any; stringLiteral: any; readonly e: void; f: any; this: any; super: any; var: any; class: any; typeof: any; }
+>{    "stringLiteral",    42,    get e,    set f,    this,    super,    var,    class,    typeof} : { 42: any; stringLiteral: any; readonly e: void; f: any; this: any; super: any; var: any; class: any; typeof: any; }
 
     "stringLiteral",
 >"stringLiteral" : any
@@ -43,8 +43,8 @@ var y = {
 > : any
 
 var x = {
->x : { a: any; : any; ss: any; [1]: any; }
->{    a.b,    a["ss"],    a[1],} : { a: any; : any; ss: any; [1]: any; }
+>x : { [1]: any; a: any; : any; ss: any; }
+>{    a.b,    a["ss"],    a[1],} : { [1]: any; a: any; : any; ss: any; }
 
     a.b,
 >a : any
diff --git a/testdata/baselines/reference/submodule/conformance/objectLiteralShorthandPropertiesErrorFromNotUsingIdentifier.types.diff b/testdata/baselines/reference/submodule/conformance/objectLiteralShorthandPropertiesErrorFromNotUsingIdentifier.types.diff
index 01f6925369..259c82a7f6 100644
--- a/testdata/baselines/reference/submodule/conformance/objectLiteralShorthandPropertiesErrorFromNotUsingIdentifier.types.diff
+++ b/testdata/baselines/reference/submodule/conformance/objectLiteralShorthandPropertiesErrorFromNotUsingIdentifier.types.diff
@@ -1,13 +1,24 @@
 --- old.objectLiteralShorthandPropertiesErrorFromNotUsingIdentifier.types
 +++ new.objectLiteralShorthandPropertiesErrorFromNotUsingIdentifier.types
-@@= skipped -42, +42 lines =@@
+@@= skipped -2, +2 lines =@@
+ === objectLiteralShorthandPropertiesErrorFromNotUsingIdentifier.ts ===
+ // errors
+ var y = {
+->y : { stringLiteral: any; 42: any; readonly e: void; f: any; this: any; super: any; var: any; class: any; typeof: any; }
+->{    "stringLiteral",    42,    get e,    set f,    this,    super,    var,    class,    typeof} : { stringLiteral: any; 42: any; readonly e: void; f: any; this: any; super: any; var: any; class: any; typeof: any; }
++>y : { 42: any; stringLiteral: any; readonly e: void; f: any; this: any; super: any; var: any; class: any; typeof: any; }
++>{    "stringLiteral",    42,    get e,    set f,    this,    super,    var,    class,    typeof} : { 42: any; stringLiteral: any; readonly e: void; f: any; this: any; super: any; var: any; class: any; typeof: any; }
+ 
+     "stringLiteral",
+ >"stringLiteral" : any
+@@= skipped -40, +40 lines =@@
  > : any
  
  var x = {
 ->x : { a: any; "": any; ss: any; 1: any; }
 ->{    a.b,    a["ss"],    a[1],} : { a: any; "": any; ss: any; 1: any; }
-+>x : { a: any; : any; ss: any; [1]: any; }
-+>{    a.b,    a["ss"],    a[1],} : { a: any; : any; ss: any; [1]: any; }
++>x : { [1]: any; a: any; : any; ss: any; }
++>{    a.b,    a["ss"],    a[1],} : { [1]: any; a: any; : any; ss: any; }
  
      a.b,
  >a : any
diff --git a/testdata/baselines/reference/submodule/conformance/objectTypeWithStringNamedNumericProperty.types b/testdata/baselines/reference/submodule/conformance/objectTypeWithStringNamedNumericProperty.types
index 37f38355b9..6806040b2d 100644
--- a/testdata/baselines/reference/submodule/conformance/objectTypeWithStringNamedNumericProperty.types
+++ b/testdata/baselines/reference/submodule/conformance/objectTypeWithStringNamedNumericProperty.types
@@ -282,7 +282,7 @@ var r13 = i[-01]
 >01 : 1
 
 var a: {
->a : { "0.1": void; ".1": Object; "1": number; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; "-1": Date; }
+>a : { "-1": Date; "1": number; "0.1": void; ".1": Object; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; }
 
     "0.1": void;
 >"0.1" : void
@@ -312,19 +312,19 @@ var a: {
 var r1 = a['0.1'];
 >r1 : void
 >a['0.1'] : void
->a : { "0.1": void; ".1": Object; "1": number; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; "-1": Date; }
+>a : { "-1": Date; "1": number; "0.1": void; ".1": Object; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; }
 >'0.1' : "0.1"
 
 var r2 = a['.1'];
 >r2 : Object
 >a['.1'] : Object
->a : { "0.1": void; ".1": Object; "1": number; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; "-1": Date; }
+>a : { "-1": Date; "1": number; "0.1": void; ".1": Object; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; }
 >'.1' : ".1"
 
 var r3 = a['1'];
 >r3 : number
 >a['1'] : number
->a : { "0.1": void; ".1": Object; "1": number; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; "-1": Date; }
+>a : { "-1": Date; "1": number; "0.1": void; ".1": Object; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; }
 >'1' : "1"
 
 var r3 = c[1];
@@ -336,7 +336,7 @@ var r3 = c[1];
 var r4 = a['1.'];
 >r4 : string
 >a['1.'] : string
->a : { "0.1": void; ".1": Object; "1": number; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; "-1": Date; }
+>a : { "-1": Date; "1": number; "0.1": void; ".1": Object; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; }
 >'1.' : "1."
 
 var r3 = c[1.]; // same as indexing by 1 when done numerically
@@ -348,13 +348,13 @@ var r3 = c[1.]; // same as indexing by 1 when done numerically
 var r5 = a['1..'];
 >r5 : boolean
 >a['1..'] : boolean
->a : { "0.1": void; ".1": Object; "1": number; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; "-1": Date; }
+>a : { "-1": Date; "1": number; "0.1": void; ".1": Object; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; }
 >'1..' : "1.."
 
 var r6 = a['1.0'];
 >r6 : Date
 >a['1.0'] : Date
->a : { "0.1": void; ".1": Object; "1": number; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; "-1": Date; }
+>a : { "-1": Date; "1": number; "0.1": void; ".1": Object; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; }
 >'1.0' : "1.0"
 
 var r3 = c[1.0]; // same as indexing by 1 when done numerically
@@ -417,8 +417,8 @@ var r13 = i[-01]
 >01 : 1
 
 var b = {
->b : { "0.1": void; ".1": Object; "1": number; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; "-1": DateConstructor; }
->{    "0.1": <void>null,    ".1": new Object(),    "1": 1,    "1.": "",    "1..": true,    "1.0": new Date(),    "-1.0": /123/,    "-1": Date} : { "0.1": void; ".1": Object; "1": number; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; "-1": DateConstructor; }
+>b : { "-1": DateConstructor; "1": number; "0.1": void; ".1": Object; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; }
+>{    "0.1": <void>null,    ".1": new Object(),    "1": 1,    "1.": "",    "1..": true,    "1.0": new Date(),    "-1.0": /123/,    "-1": Date} : { "-1": DateConstructor; "1": number; "0.1": void; ".1": Object; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; }
 
     "0.1": <void>null,
 >"0.1" : void
@@ -459,19 +459,19 @@ var b = {
 var r1 = b['0.1'];
 >r1 : void
 >b['0.1'] : void
->b : { "0.1": void; ".1": Object; "1": number; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; "-1": DateConstructor; }
+>b : { "-1": DateConstructor; "1": number; "0.1": void; ".1": Object; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; }
 >'0.1' : "0.1"
 
 var r2 = b['.1'];
 >r2 : Object
 >b['.1'] : Object
->b : { "0.1": void; ".1": Object; "1": number; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; "-1": DateConstructor; }
+>b : { "-1": DateConstructor; "1": number; "0.1": void; ".1": Object; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; }
 >'.1' : ".1"
 
 var r3 = b['1'];
 >r3 : number
 >b['1'] : number
->b : { "0.1": void; ".1": Object; "1": number; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; "-1": DateConstructor; }
+>b : { "-1": DateConstructor; "1": number; "0.1": void; ".1": Object; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; }
 >'1' : "1"
 
 var r3 = c[1];
@@ -483,7 +483,7 @@ var r3 = c[1];
 var r4 = b['1.'];
 >r4 : string
 >b['1.'] : string
->b : { "0.1": void; ".1": Object; "1": number; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; "-1": DateConstructor; }
+>b : { "-1": DateConstructor; "1": number; "0.1": void; ".1": Object; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; }
 >'1.' : "1."
 
 var r3 = c[1.]; // same as indexing by 1 when done numerically
@@ -495,13 +495,13 @@ var r3 = c[1.]; // same as indexing by 1 when done numerically
 var r5 = b['1..'];
 >r5 : boolean
 >b['1..'] : boolean
->b : { "0.1": void; ".1": Object; "1": number; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; "-1": DateConstructor; }
+>b : { "-1": DateConstructor; "1": number; "0.1": void; ".1": Object; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; }
 >'1..' : "1.."
 
 var r6 = b['1.0'];
 >r6 : Date
 >b['1.0'] : Date
->b : { "0.1": void; ".1": Object; "1": number; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; "-1": DateConstructor; }
+>b : { "-1": DateConstructor; "1": number; "0.1": void; ".1": Object; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; }
 >'1.0' : "1.0"
 
 var r3 = c[1.0]; // same as indexing by 1 when done numerically
diff --git a/testdata/baselines/reference/submodule/conformance/objectTypeWithStringNamedNumericProperty.types.diff b/testdata/baselines/reference/submodule/conformance/objectTypeWithStringNamedNumericProperty.types.diff
index ec8a0720f9..dc95c17fa7 100644
--- a/testdata/baselines/reference/submodule/conformance/objectTypeWithStringNamedNumericProperty.types.diff
+++ b/testdata/baselines/reference/submodule/conformance/objectTypeWithStringNamedNumericProperty.types.diff
@@ -9,3 +9,119 @@
      "0.1": void;
  >"0.1" : void
  
+@@= skipped -136, +138 lines =@@
+ >01 : 1
+ 
+ var a: {
+->a : { "0.1": void; ".1": Object; "1": number; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; "-1": Date; }
++>a : { "-1": Date; "1": number; "0.1": void; ".1": Object; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; }
+ 
+     "0.1": void;
+ >"0.1" : void
+@@= skipped -30, +30 lines =@@
+ var r1 = a['0.1'];
+ >r1 : void
+ >a['0.1'] : void
+->a : { "0.1": void; ".1": Object; "1": number; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; "-1": Date; }
++>a : { "-1": Date; "1": number; "0.1": void; ".1": Object; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; }
+ >'0.1' : "0.1"
+ 
+ var r2 = a['.1'];
+ >r2 : Object
+ >a['.1'] : Object
+->a : { "0.1": void; ".1": Object; "1": number; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; "-1": Date; }
++>a : { "-1": Date; "1": number; "0.1": void; ".1": Object; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; }
+ >'.1' : ".1"
+ 
+ var r3 = a['1'];
+ >r3 : number
+ >a['1'] : number
+->a : { "0.1": void; ".1": Object; "1": number; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; "-1": Date; }
++>a : { "-1": Date; "1": number; "0.1": void; ".1": Object; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; }
+ >'1' : "1"
+ 
+ var r3 = c[1];
+@@= skipped -24, +24 lines =@@
+ var r4 = a['1.'];
+ >r4 : string
+ >a['1.'] : string
+->a : { "0.1": void; ".1": Object; "1": number; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; "-1": Date; }
++>a : { "-1": Date; "1": number; "0.1": void; ".1": Object; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; }
+ >'1.' : "1."
+ 
+ var r3 = c[1.]; // same as indexing by 1 when done numerically
+@@= skipped -12, +12 lines =@@
+ var r5 = a['1..'];
+ >r5 : boolean
+ >a['1..'] : boolean
+->a : { "0.1": void; ".1": Object; "1": number; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; "-1": Date; }
++>a : { "-1": Date; "1": number; "0.1": void; ".1": Object; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; }
+ >'1..' : "1.."
+ 
+ var r6 = a['1.0'];
+ >r6 : Date
+ >a['1.0'] : Date
+->a : { "0.1": void; ".1": Object; "1": number; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; "-1": Date; }
++>a : { "-1": Date; "1": number; "0.1": void; ".1": Object; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; }
+ >'1.0' : "1.0"
+ 
+ var r3 = c[1.0]; // same as indexing by 1 when done numerically
+@@= skipped -69, +69 lines =@@
+ >01 : 1
+ 
+ var b = {
+->b : { "0.1": void; ".1": Object; "1": number; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; "-1": DateConstructor; }
+->{    "0.1": <void>null,    ".1": new Object(),    "1": 1,    "1.": "",    "1..": true,    "1.0": new Date(),    "-1.0": /123/,    "-1": Date} : { "0.1": void; ".1": Object; "1": number; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; "-1": DateConstructor; }
++>b : { "-1": DateConstructor; "1": number; "0.1": void; ".1": Object; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; }
++>{    "0.1": <void>null,    ".1": new Object(),    "1": 1,    "1.": "",    "1..": true,    "1.0": new Date(),    "-1.0": /123/,    "-1": Date} : { "-1": DateConstructor; "1": number; "0.1": void; ".1": Object; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; }
+ 
+     "0.1": <void>null,
+ >"0.1" : void
+@@= skipped -42, +42 lines =@@
+ var r1 = b['0.1'];
+ >r1 : void
+ >b['0.1'] : void
+->b : { "0.1": void; ".1": Object; "1": number; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; "-1": DateConstructor; }
++>b : { "-1": DateConstructor; "1": number; "0.1": void; ".1": Object; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; }
+ >'0.1' : "0.1"
+ 
+ var r2 = b['.1'];
+ >r2 : Object
+ >b['.1'] : Object
+->b : { "0.1": void; ".1": Object; "1": number; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; "-1": DateConstructor; }
++>b : { "-1": DateConstructor; "1": number; "0.1": void; ".1": Object; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; }
+ >'.1' : ".1"
+ 
+ var r3 = b['1'];
+ >r3 : number
+ >b['1'] : number
+->b : { "0.1": void; ".1": Object; "1": number; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; "-1": DateConstructor; }
++>b : { "-1": DateConstructor; "1": number; "0.1": void; ".1": Object; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; }
+ >'1' : "1"
+ 
+ var r3 = c[1];
+@@= skipped -24, +24 lines =@@
+ var r4 = b['1.'];
+ >r4 : string
+ >b['1.'] : string
+->b : { "0.1": void; ".1": Object; "1": number; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; "-1": DateConstructor; }
++>b : { "-1": DateConstructor; "1": number; "0.1": void; ".1": Object; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; }
+ >'1.' : "1."
+ 
+ var r3 = c[1.]; // same as indexing by 1 when done numerically
+@@= skipped -12, +12 lines =@@
+ var r5 = b['1..'];
+ >r5 : boolean
+ >b['1..'] : boolean
+->b : { "0.1": void; ".1": Object; "1": number; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; "-1": DateConstructor; }
++>b : { "-1": DateConstructor; "1": number; "0.1": void; ".1": Object; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; }
+ >'1..' : "1.."
+ 
+ var r6 = b['1.0'];
+ >r6 : Date
+ >b['1.0'] : Date
+->b : { "0.1": void; ".1": Object; "1": number; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; "-1": DateConstructor; }
++>b : { "-1": DateConstructor; "1": number; "0.1": void; ".1": Object; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; }
+ >'1.0' : "1.0"
+ 
+ var r3 = c[1.0]; // same as indexing by 1 when done numerically
diff --git a/testdata/baselines/reference/submodule/conformance/objectTypesWithOptionalProperties2.types b/testdata/baselines/reference/submodule/conformance/objectTypesWithOptionalProperties2.types
index 39e5ef1730..eea0e43398 100644
--- a/testdata/baselines/reference/submodule/conformance/objectTypesWithOptionalProperties2.types
+++ b/testdata/baselines/reference/submodule/conformance/objectTypesWithOptionalProperties2.types
@@ -47,8 +47,8 @@ class C2<T> {
 
 
 var b = {
->b : { x: () => any; 1: any; }
->{    x()?: 1 // error} : { x: () => any; 1: any; }
+>b : { 1: any; x: () => any; }
+>{    x()?: 1 // error} : { 1: any; x: () => any; }
 
     x()?: 1 // error
 >x : () => any
diff --git a/testdata/baselines/reference/submodule/conformance/objectTypesWithOptionalProperties2.types.diff b/testdata/baselines/reference/submodule/conformance/objectTypesWithOptionalProperties2.types.diff
index 5747a53ed4..7fd5ca4515 100644
--- a/testdata/baselines/reference/submodule/conformance/objectTypesWithOptionalProperties2.types.diff
+++ b/testdata/baselines/reference/submodule/conformance/objectTypesWithOptionalProperties2.types.diff
@@ -42,8 +42,8 @@
  var b = {
 ->b : { x(): any; 1: any; }
 ->{    x()?: 1 // error} : { x(): any; 1: any; }
-+>b : { x: () => any; 1: any; }
-+>{    x()?: 1 // error} : { x: () => any; 1: any; }
++>b : { 1: any; x: () => any; }
++>{    x()?: 1 // error} : { 1: any; x: () => any; }
  
      x()?: 1 // error
  >x : () => any
diff --git a/testdata/baselines/reference/submodule/conformance/stringIndexerConstrainsPropertyDeclarations.types b/testdata/baselines/reference/submodule/conformance/stringIndexerConstrainsPropertyDeclarations.types
index ede6783f38..5e65724e90 100644
--- a/testdata/baselines/reference/submodule/conformance/stringIndexerConstrainsPropertyDeclarations.types
+++ b/testdata/baselines/reference/submodule/conformance/stringIndexerConstrainsPropertyDeclarations.types
@@ -127,7 +127,7 @@ interface I {
 }
 
 var a: {
->a : { (): string; (x: any): number; [x: string]: string; a: string; b: number; c: () => {}; d: string; e: number; 1.0: string; 2.0: number; foo: () => string; "3.0": string; "4.0": number; f: MyString; }
+>a : { (): string; (x: any): number; [x: string]: string; 1.0: string; 2.0: number; a: string; b: number; c: () => {}; d: string; e: number; foo: () => string; "3.0": string; "4.0": number; f: MyString; }
 
     [x: string]: string;
 >x : string
@@ -174,7 +174,7 @@ var a: {
 var b: { [x: string]: string; } = {
 >b : { [x: string]: string; }
 >x : string
->{    a: '',    b: 1,     c: () => { },     "d": '',     "e": 1,     1.0: '',    2.0: 1,     "3.0": '',     "4.0": 1,     f: <MyString>null,     get X() {         return '';    },    set X(v) { },     foo() {         return '';    }} : { a: string; b: number; c: () => void; d: string; e: number; 1.0: string; 2.0: number; "3.0": string; "4.0": number; f: MyString; X: string; foo: () => string; }
+>{    a: '',    b: 1,     c: () => { },     "d": '',     "e": 1,     1.0: '',    2.0: 1,     "3.0": '',     "4.0": 1,     f: <MyString>null,     get X() {         return '';    },    set X(v) { },     foo() {         return '';    }} : { 1.0: string; 2.0: number; a: string; b: number; c: () => void; d: string; e: number; "3.0": string; "4.0": number; f: MyString; X: string; foo: () => string; }
 
     a: '',
 >a : string
diff --git a/testdata/baselines/reference/submodule/conformance/stringIndexerConstrainsPropertyDeclarations.types.diff b/testdata/baselines/reference/submodule/conformance/stringIndexerConstrainsPropertyDeclarations.types.diff
index 42c2d1faeb..f7798d6c83 100644
--- a/testdata/baselines/reference/submodule/conformance/stringIndexerConstrainsPropertyDeclarations.types.diff
+++ b/testdata/baselines/reference/submodule/conformance/stringIndexerConstrainsPropertyDeclarations.types.diff
@@ -23,7 +23,7 @@
  
  var a: {
 ->a : { (): string; (x: any): number; [x: string]: string; a: string; b: number; c: () => {}; d: string; e: number; 1: string; 2: number; foo(): string; "3.0": string; "4.0": number; f: MyString; }
-+>a : { (): string; (x: any): number; [x: string]: string; a: string; b: number; c: () => {}; d: string; e: number; 1.0: string; 2.0: number; foo: () => string; "3.0": string; "4.0": number; f: MyString; }
++>a : { (): string; (x: any): number; [x: string]: string; 1.0: string; 2.0: number; a: string; b: number; c: () => {}; d: string; e: number; foo: () => string; "3.0": string; "4.0": number; f: MyString; }
  
      [x: string]: string;
  >x : string
@@ -32,7 +32,7 @@
  >b : { [x: string]: string; }
  >x : string
 ->{    a: '',    b: 1,     c: () => { },     "d": '',     "e": 1,     1.0: '',    2.0: 1,     "3.0": '',     "4.0": 1,     f: <MyString>null,     get X() {         return '';    },    set X(v) { },     foo() {         return '';    }} : { a: string; b: number; c: () => void; d: string; e: number; 1: string; 2: number; "3.0": string; "4.0": number; f: MyString; X: string; foo(): string; }
-+>{    a: '',    b: 1,     c: () => { },     "d": '',     "e": 1,     1.0: '',    2.0: 1,     "3.0": '',     "4.0": 1,     f: <MyString>null,     get X() {         return '';    },    set X(v) { },     foo() {         return '';    }} : { a: string; b: number; c: () => void; d: string; e: number; 1.0: string; 2.0: number; "3.0": string; "4.0": number; f: MyString; X: string; foo: () => string; }
++>{    a: '',    b: 1,     c: () => { },     "d": '',     "e": 1,     1.0: '',    2.0: 1,     "3.0": '',     "4.0": 1,     f: <MyString>null,     get X() {         return '';    },    set X(v) { },     foo() {         return '';    }} : { 1.0: string; 2.0: number; a: string; b: number; c: () => void; d: string; e: number; "3.0": string; "4.0": number; f: MyString; X: string; foo: () => string; }
  
      a: '',
  >a : string

From 5969539832de98fa083676387c8b1195a2e1d451 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Mateusz=20Burzy=C5=84ski?= <mateuszburzynski@gmail.com>
Date: Sat, 22 Mar 2025 11:21:36 +0100
Subject: [PATCH 2/3] remove debug code

---
 internal/checker/checker.go | 4 ----
 1 file changed, 4 deletions(-)

diff --git a/internal/checker/checker.go b/internal/checker/checker.go
index f2de7e7508..99f1bacb21 100644
--- a/internal/checker/checker.go
+++ b/internal/checker/checker.go
@@ -6,7 +6,6 @@ import (
 	"maps"
 	"math"
 
-	// "runtime"
 	"slices"
 	"strconv"
 	"strings"
@@ -23169,9 +23168,6 @@ func (c *Checker) setStructuredTypeMembers(t *Type, members ast.SymbolTable, cal
 	t.objectFlags |= ObjectFlagsMembersResolved
 	data := t.AsStructuredType()
 	data.members = members
-	// if t.id == 167 {
-	// 	runtime.Breakpoint()
-	// }
 	data.properties = c.getNamedMembers(members)
 	if len(callSignatures) != 0 {
 		if len(constructSignatures) != 0 {

From 76ad0f4caa0fa73899b3549100fc270fc43a6487 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Mateusz=20Burzy=C5=84ski?= <mateuszburzynski@gmail.com>
Date: Sat, 22 Mar 2025 11:24:56 +0100
Subject: [PATCH 3/3] simplify

---
 internal/checker/utilities.go | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/internal/checker/utilities.go b/internal/checker/utilities.go
index 7d768fea18..1dd89460b7 100644
--- a/internal/checker/utilities.go
+++ b/internal/checker/utilities.go
@@ -632,12 +632,12 @@ func (c *Checker) compareSymbolsWorker(s1, s2 *ast.Symbol) int {
 	int1, err1 := strconv.Atoi(s1.Name)
 	int2, err2 := strconv.Atoi(s2.Name)
 	if err1 == nil && err2 == nil {
-		if rv := cmp.Compare(int1, int2); rv != 0 {
-			return rv
-		}
-	} else if err1 == nil {
+		return cmp.Compare(int1, int2)
+	}
+	if err1 == nil {
 		return -1
-	} else if err2 == nil {
+	}
+	if err2 == nil {
 		return 1
 	}
 	if len(s1.Declarations) != 0 && len(s2.Declarations) != 0 {