diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts
index c38d9c2a0416a..0bb247bc4e773 100644
--- a/src/compiler/checker.ts
+++ b/src/compiler/checker.ts
@@ -17007,7 +17007,10 @@ namespace ts {
                 case SyntaxKind.ObjectLiteralExpression:
                     return some((node as ObjectLiteralExpression).properties, isContextSensitive);
                 case SyntaxKind.ArrayLiteralExpression:
-                    return some((node as ArrayLiteralExpression).elements, isContextSensitive);
+                    if ((node as ArrayLiteralExpression).elements.length > 0) {
+                        return some((node as ArrayLiteralExpression).elements, isContextSensitive);
+                    }
+                    return true;
                 case SyntaxKind.ConditionalExpression:
                     return isContextSensitive((node as ConditionalExpression).whenTrue) ||
                         isContextSensitive((node as ConditionalExpression).whenFalse);
@@ -27093,6 +27096,12 @@ namespace ts {
             const elementTypes: Type[] = [];
             const elementFlags: ElementFlags[] = [];
             const contextualType = getApparentTypeOfContextualType(node);
+            if (elementCount === 0 && contextualType && !checkMode) {
+                const elementType = getElementTypeOfArrayType(contextualType);
+                if (elementType) {
+                    return createArrayType(elementType);
+                }
+            }
             const inDestructuringPattern = isAssignmentTarget(node);
             const inConstContext = isConstContext(node);
             let hasOmittedExpression = false;
diff --git a/tests/baselines/reference/arrayAssignmentTest1.types b/tests/baselines/reference/arrayAssignmentTest1.types
index 76810a6eb33e0..c4d8f780f199a 100644
--- a/tests/baselines/reference/arrayAssignmentTest1.types
+++ b/tests/baselines/reference/arrayAssignmentTest1.types
@@ -81,35 +81,35 @@ var f1 = function () { return new C1();}
 
 var arr_any: any[] = [];
 >arr_any : any[]
->[] : undefined[]
+>[] : any[]
 
 var arr_i1: I1[] = [];
 >arr_i1 : I1[]
->[] : undefined[]
+>[] : I1[]
 
 var arr_c1: C1[] = [];
 >arr_c1 : C1[]
->[] : undefined[]
+>[] : C1[]
 
 var arr_c2: C2[] = [];
 >arr_c2 : C2[]
->[] : undefined[]
+>[] : C2[]
 
 var arr_i1_2: I1[] = [];
 >arr_i1_2 : I1[]
->[] : undefined[]
+>[] : I1[]
 
 var arr_c1_2: C1[] = [];
 >arr_c1_2 : C1[]
->[] : undefined[]
+>[] : C1[]
 
 var arr_c2_2: C2[] = [];
 >arr_c2_2 : C2[]
->[] : undefined[]
+>[] : C2[]
 
 var arr_c3: C3[] = [];
 >arr_c3 : C3[]
->[] : undefined[]
+>[] : C3[]
 
 var i1_error: I1 = []; // should be an error - is
 >i1_error : I1
diff --git a/tests/baselines/reference/arrayAssignmentTest2.types b/tests/baselines/reference/arrayAssignmentTest2.types
index 100336ae58bb7..9b8ddcd47d800 100644
--- a/tests/baselines/reference/arrayAssignmentTest2.types
+++ b/tests/baselines/reference/arrayAssignmentTest2.types
@@ -81,35 +81,35 @@ var f1 = function () { return new C1();}
 
 var arr_any: any[] = [];
 >arr_any : any[]
->[] : undefined[]
+>[] : any[]
 
 var arr_i1: I1[] = [];
 >arr_i1 : I1[]
->[] : undefined[]
+>[] : I1[]
 
 var arr_c1: C1[] = [];
 >arr_c1 : C1[]
->[] : undefined[]
+>[] : C1[]
 
 var arr_c2: C2[] = [];
 >arr_c2 : C2[]
->[] : undefined[]
+>[] : C2[]
 
 var arr_i1_2: I1[] = [];
 >arr_i1_2 : I1[]
->[] : undefined[]
+>[] : I1[]
 
 var arr_c1_2: C1[] = [];
 >arr_c1_2 : C1[]
->[] : undefined[]
+>[] : C1[]
 
 var arr_c2_2: C2[] = [];
 >arr_c2_2 : C2[]
->[] : undefined[]
+>[] : C2[]
 
 var arr_c3: C3[] = [];
 >arr_c3 : C3[]
->[] : undefined[]
+>[] : C3[]
 
 // "clean up error" occurs at this point
 arr_c3 = arr_c2_2; // should be an error - is
diff --git a/tests/baselines/reference/arrayAssignmentTest4.types b/tests/baselines/reference/arrayAssignmentTest4.types
index 3c3579d2e38aa..1e29ef854a8d8 100644
--- a/tests/baselines/reference/arrayAssignmentTest4.types
+++ b/tests/baselines/reference/arrayAssignmentTest4.types
@@ -32,7 +32,7 @@ var o1 = {one : 1};
 
 var arr_any: any[] = [];
 >arr_any : any[]
->[] : undefined[]
+>[] : any[]
 
 arr_any = function () { return null;} // should be an error - is
 >arr_any = function () { return null;} : () => any
diff --git a/tests/baselines/reference/arrayConcat2.types b/tests/baselines/reference/arrayConcat2.types
index f1ca2a5f10977..1af44d4740639 100644
--- a/tests/baselines/reference/arrayConcat2.types
+++ b/tests/baselines/reference/arrayConcat2.types
@@ -1,7 +1,7 @@
 === tests/cases/compiler/arrayConcat2.ts ===
 var a: string[] = [];
 >a : string[]
->[] : undefined[]
+>[] : string[]
 
 a.concat("hello", 'world');
 >a.concat("hello", 'world') : string[]
diff --git a/tests/baselines/reference/arrayFlatMap.types b/tests/baselines/reference/arrayFlatMap.types
index 0e36141f64b64..eb6cc91ae8cd5 100644
--- a/tests/baselines/reference/arrayFlatMap.types
+++ b/tests/baselines/reference/arrayFlatMap.types
@@ -1,11 +1,11 @@
 === tests/cases/compiler/arrayFlatMap.ts ===
 const array: number[] = [];
 >array : number[]
->[] : undefined[]
+>[] : number[]
 
 const readonlyArray: ReadonlyArray<number> = [];
 >readonlyArray : readonly number[]
->[] : undefined[]
+>[] : number[]
 
 array.flatMap((): ReadonlyArray<number> => []); // ok
 >array.flatMap((): ReadonlyArray<number> => []) : number[]
@@ -13,7 +13,7 @@ array.flatMap((): ReadonlyArray<number> => []); // ok
 >array : number[]
 >flatMap : <U, This = undefined>(callback: (this: This, value: number, index: number, array: number[]) => U | readonly U[], thisArg?: This) => U[]
 >(): ReadonlyArray<number> => [] : () => ReadonlyArray<number>
->[] : undefined[]
+>[] : number[]
 
 readonlyArray.flatMap((): ReadonlyArray<number> => []); // ok
 >readonlyArray.flatMap((): ReadonlyArray<number> => []) : number[]
@@ -21,5 +21,5 @@ readonlyArray.flatMap((): ReadonlyArray<number> => []); // ok
 >readonlyArray : readonly number[]
 >flatMap : <U, This = undefined>(callback: (this: This, value: number, index: number, array: number[]) => U | readonly U[], thisArg?: This) => U[]
 >(): ReadonlyArray<number> => [] : () => ReadonlyArray<number>
->[] : undefined[]
+>[] : number[]
 
diff --git a/tests/baselines/reference/arrayFrom.types b/tests/baselines/reference/arrayFrom.types
index 8c755a6366f8a..7273fbbb5918b 100644
--- a/tests/baselines/reference/arrayFrom.types
+++ b/tests/baselines/reference/arrayFrom.types
@@ -14,11 +14,11 @@ interface B {
 
 const inputA: A[] = [];
 >inputA : A[]
->[] : undefined[]
+>[] : A[]
 
 const inputB: B[] = [];
 >inputB : B[]
->[] : undefined[]
+>[] : B[]
 
 const inputALike: ArrayLike<A> = { length: 0 };
 >inputALike : ArrayLike<A>
diff --git a/tests/baselines/reference/arrayLiteral.types b/tests/baselines/reference/arrayLiteral.types
index c36cc93c68e38..04d172b3e661e 100644
--- a/tests/baselines/reference/arrayLiteral.types
+++ b/tests/baselines/reference/arrayLiteral.types
@@ -29,7 +29,7 @@ var y = new Array<number>();
 
 var x2: number[] = [];
 >x2 : number[]
->[] : undefined[]
+>[] : number[]
 
 var x2: number[] = new Array(1);
 >x2 : number[]
diff --git a/tests/baselines/reference/arrayLiteralInNonVarArgParameter.types b/tests/baselines/reference/arrayLiteralInNonVarArgParameter.types
index 4b46e0bf29f00..7721ab351d2a7 100644
--- a/tests/baselines/reference/arrayLiteralInNonVarArgParameter.types
+++ b/tests/baselines/reference/arrayLiteralInNonVarArgParameter.types
@@ -7,7 +7,7 @@ function panic(val: string[], ...opt: string[]) { }
 panic([], 'one', 'two');
 >panic([], 'one', 'two') : void
 >panic : (val: string[], ...opt: string[]) => void
->[] : undefined[]
+>[] : string[]
 >'one' : "one"
 >'two' : "two"
 
diff --git a/tests/baselines/reference/badArraySyntax.types b/tests/baselines/reference/badArraySyntax.types
index 053b4af944863..599c1b4a24cc0 100644
--- a/tests/baselines/reference/badArraySyntax.types
+++ b/tests/baselines/reference/badArraySyntax.types
@@ -9,7 +9,7 @@ class Z {
 
 var a1: Z[] = [];
 >a1 : Z[]
->[] : undefined[]
+>[] : Z[]
 
 var a2 = new Z[];
 >a2 : any
diff --git a/tests/baselines/reference/checkInfiniteExpansionTermination2.types b/tests/baselines/reference/checkInfiniteExpansionTermination2.types
index 61f3410198982..e751201473541 100644
--- a/tests/baselines/reference/checkInfiniteExpansionTermination2.types
+++ b/tests/baselines/reference/checkInfiniteExpansionTermination2.types
@@ -20,7 +20,7 @@ function fn<T>() {
 
     var values: ISubject<any>[] = [];
 >values : ISubject<any>[]
->[] : undefined[]
+>[] : ISubject<any>[]
 
     // Hang when using <T>, but not <any>
     combineLatest<T>(values);
diff --git a/tests/baselines/reference/checkSpecialPropertyAssignments.types b/tests/baselines/reference/checkSpecialPropertyAssignments.types
index 14043231b0294..6ba1ed2dbf35d 100644
--- a/tests/baselines/reference/checkSpecialPropertyAssignments.types
+++ b/tests/baselines/reference/checkSpecialPropertyAssignments.types
@@ -16,7 +16,7 @@ A.B = class {
         /** @type {string[]} */
         var x = [];
 >x : string[]
->[] : undefined[]
+>[] : string[]
 
         /** @type {number[]} */
         var y;
diff --git a/tests/baselines/reference/circularInferredTypeOfVariable.types b/tests/baselines/reference/circularInferredTypeOfVariable.types
index c0ddb43fd8bd9..0b99adcc6efa1 100644
--- a/tests/baselines/reference/circularInferredTypeOfVariable.types
+++ b/tests/baselines/reference/circularInferredTypeOfVariable.types
@@ -10,7 +10,7 @@
 >p : string[]
 
         return [];
->[] : undefined[]
+>[] : string[]
     }
 
     function bar(p: string[]): string[] {
@@ -18,12 +18,12 @@
 >p : string[]
 
         return [];
->[] : undefined[]
+>[] : string[]
     }
 
     let a1: string[] | undefined = [];
 >a1 : string[]
->[] : undefined[]
+>[] : string[]
 
     while (true) {
 >true : true
diff --git a/tests/baselines/reference/classExpressionWithStaticProperties3.types b/tests/baselines/reference/classExpressionWithStaticProperties3.types
index 67823ea83403a..3fac18d0e6788 100644
--- a/tests/baselines/reference/classExpressionWithStaticProperties3.types
+++ b/tests/baselines/reference/classExpressionWithStaticProperties3.types
@@ -5,7 +5,7 @@ declare var console: any;
 const arr: {y(): number}[] = [];
 >arr : { y(): number; }[]
 >y : () => number
->[] : undefined[]
+>[] : { y(): number; }[]
 
 for (let i = 0; i < 3; i++) {
 >i : number
diff --git a/tests/baselines/reference/classExpressionWithStaticPropertiesES63.types b/tests/baselines/reference/classExpressionWithStaticPropertiesES63.types
index 5a948f54402c9..af50b8adab9ab 100644
--- a/tests/baselines/reference/classExpressionWithStaticPropertiesES63.types
+++ b/tests/baselines/reference/classExpressionWithStaticPropertiesES63.types
@@ -5,7 +5,7 @@ declare var console: any;
 const arr: {y(): number}[] = [];
 >arr : { y(): number; }[]
 >y : () => number
->[] : undefined[]
+>[] : { y(): number; }[]
 
 for (let i = 0; i < 3; i++) {
 >i : number
diff --git a/tests/baselines/reference/commaOperatorLeftSideUnused.types b/tests/baselines/reference/commaOperatorLeftSideUnused.types
index 585ac1ca7e0c2..9b33aef0e7e4c 100644
--- a/tests/baselines/reference/commaOperatorLeftSideUnused.types
+++ b/tests/baselines/reference/commaOperatorLeftSideUnused.types
@@ -10,7 +10,7 @@ function fn() {
 
   let arr: any[] = [];
 >arr : any[]
->[] : undefined[]
+>[] : any[]
 
   switch(arr.length) {
 >arr.length : number
diff --git a/tests/baselines/reference/conditionalTypeDiscriminatingLargeUnionRegularTypeFetchingSpeedReasonable.types b/tests/baselines/reference/conditionalTypeDiscriminatingLargeUnionRegularTypeFetchingSpeedReasonable.types
index a4709500c7789..298de0d4938d9 100644
--- a/tests/baselines/reference/conditionalTypeDiscriminatingLargeUnionRegularTypeFetchingSpeedReasonable.types
+++ b/tests/baselines/reference/conditionalTypeDiscriminatingLargeUnionRegularTypeFetchingSpeedReasonable.types
@@ -16019,6 +16019,6 @@ export function makeThing<T extends BigUnion['name']>(
 
     children: ChildrenOf<WithName<T>>[] = [],
 >children : ChildrenOf<WithName<T>>[]
->[] : undefined[]
+>[] : ChildrenOf<WithName<T>>[]
 
 ) { }
diff --git a/tests/baselines/reference/contextualOverloadListFromArrayUnion.types b/tests/baselines/reference/contextualOverloadListFromArrayUnion.types
index f42e54a0cec7d..a56ccc41bb1dc 100644
--- a/tests/baselines/reference/contextualOverloadListFromArrayUnion.types
+++ b/tests/baselines/reference/contextualOverloadListFromArrayUnion.types
@@ -83,7 +83,7 @@ export function series<T>(tasks: Task<T>[], callback: Callback<T[]>): void {
 
     let results: T[] = []
 >results : T[]
->[] : never[]
+>[] : T[]
 
     function next() {
 >next : () => void
diff --git a/tests/baselines/reference/contextualTyping.types b/tests/baselines/reference/contextualTyping.types
index 9d0bc119879db..52d3dc1de1142 100644
--- a/tests/baselines/reference/contextualTyping.types
+++ b/tests/baselines/reference/contextualTyping.types
@@ -75,7 +75,7 @@ var c3t2 = <IFoo>({
 })
 var c3t3: number[] = [];
 >c3t3 : number[]
->[] : undefined[]
+>[] : number[]
 
 var c3t4: () => IFoo = function() { return <IFoo>({}) };
 >c3t4 : () => IFoo
@@ -128,9 +128,9 @@ var c3t8: (n: number, s: string) => number = function(n) { return n; };
 
 var c3t9: number[][] = [[],[]];
 >c3t9 : number[][]
->[[],[]] : undefined[][]
->[] : undefined[]
->[] : undefined[]
+>[[],[]] : number[][]
+>[] : number[]
+>[] : number[]
 
 var c3t10: IFoo[] = [<IFoo>({}),<IFoo>({})];
 >c3t10 : IFoo[]
@@ -179,12 +179,12 @@ var c3t13 = <IFoo>({
 var c3t14 = <IFoo>({
 >c3t14 : IFoo
 ><IFoo>({    a: []}) : IFoo
->({    a: []}) : { a: undefined[]; }
->{    a: []} : { a: undefined[]; }
+>({    a: []}) : { a: number[]; }
+>{    a: []} : { a: number[]; }
 
     a: []
->a : undefined[]
->[] : undefined[]
+>a : number[]
+>[] : number[]
 
 })
 
@@ -413,11 +413,11 @@ objc8.t2 = <IFoo>({
 
 });
 objc8.t3 = [];
->objc8.t3 = [] : undefined[]
+>objc8.t3 = [] : number[]
 >objc8.t3 : number[]
 >objc8 : { t1: (s: string) => string; t2: IFoo; t3: number[]; t4: () => IFoo; t5: (n: number) => IFoo; t6: (n: number, s: string) => IFoo; t7: (n: number, s: string) => number; t8: (n: number, s: string) => number; t9: number[][]; t10: IFoo[]; t11: ((n: number, s: string) => string)[]; t12: IBar; t13: IFoo; t14: IFoo; }
 >t3 : number[]
->[] : undefined[]
+>[] : number[]
 
 objc8.t4 = function() { return <IFoo>({}) };
 >objc8.t4 = function() { return <IFoo>({}) } : () => IFoo
@@ -471,13 +471,13 @@ objc8.t8 = function(n) { return n; };
 >n : number
 
 objc8.t9 = [[],[]];
->objc8.t9 = [[],[]] : undefined[][]
+>objc8.t9 = [[],[]] : number[][]
 >objc8.t9 : number[][]
 >objc8 : { t1: (s: string) => string; t2: IFoo; t3: number[]; t4: () => IFoo; t5: (n: number) => IFoo; t6: (n: number, s: string) => IFoo; t7: (n: number, s: string) => number; t8: (n: number, s: string) => number; t9: number[][]; t10: IFoo[]; t11: ((n: number, s: string) => string)[]; t12: IBar; t13: IFoo; t14: IFoo; }
 >t9 : number[][]
->[[],[]] : undefined[][]
->[] : undefined[]
->[] : undefined[]
+>[[],[]] : number[][]
+>[] : number[]
+>[] : number[]
 
 objc8.t10 = [<IFoo>({}),<IFoo>({})];
 >objc8.t10 = [<IFoo>({}),<IFoo>({})] : IFoo[]
@@ -539,12 +539,12 @@ objc8.t14 = <IFoo>({
 >objc8 : { t1: (s: string) => string; t2: IFoo; t3: number[]; t4: () => IFoo; t5: (n: number) => IFoo; t6: (n: number, s: string) => IFoo; t7: (n: number, s: string) => number; t8: (n: number, s: string) => number; t9: number[][]; t10: IFoo[]; t11: ((n: number, s: string) => string)[]; t12: IBar; t13: IFoo; t14: IFoo; }
 >t14 : IFoo
 ><IFoo>({    a: []}) : IFoo
->({    a: []}) : { a: undefined[]; }
->{    a: []} : { a: undefined[]; }
+>({    a: []}) : { a: number[]; }
+>{    a: []} : { a: number[]; }
 
     a: []
->a : undefined[]
->[] : undefined[]
+>a : number[]
+>[] : number[]
 
 })
 // CONTEXT: Function call
@@ -617,7 +617,7 @@ var c12t2 = <IFoo> ({
 var c12t3 = <number[]> [];
 >c12t3 : number[]
 ><number[]> [] : number[]
->[] : undefined[]
+>[] : number[]
 
 var c12t4 = <() => IFoo> function() { return <IFoo>({}) };
 >c12t4 : () => IFoo
@@ -675,9 +675,9 @@ var c12t8 = <(n: number, s: string) => number> function(n) { return n; };
 var c12t9 = <number[][]> [[],[]];
 >c12t9 : number[][]
 ><number[][]> [[],[]] : number[][]
->[[],[]] : undefined[][]
->[] : undefined[]
->[] : undefined[]
+>[[],[]] : number[][]
+>[] : number[]
+>[] : number[]
 
 var c12t10 = <IFoo[]> [<IFoo>({}),<IFoo>({})];
 >c12t10 : IFoo[]
@@ -729,12 +729,12 @@ var c12t13 = <IFoo> ({
 var c12t14 = <IFoo> ({
 >c12t14 : IFoo
 ><IFoo> ({    a: []}) : IFoo
->({    a: []}) : { a: undefined[]; }
->{    a: []} : { a: undefined[]; }
+>({    a: []}) : { a: number[]; }
+>{    a: []} : { a: number[]; }
 
     a: []
->a : undefined[]
->[] : undefined[]
+>a : number[]
+>[] : number[]
 
 })
 
diff --git a/tests/baselines/reference/contextualTypingArrayDestructuringWithDefaults.types b/tests/baselines/reference/contextualTypingArrayDestructuringWithDefaults.types
index 30e35d683dbd3..9729d414541bb 100644
--- a/tests/baselines/reference/contextualTypingArrayDestructuringWithDefaults.types
+++ b/tests/baselines/reference/contextualTypingArrayDestructuringWithDefaults.types
@@ -24,7 +24,7 @@ let [ c_ = {a: "a"} ]: I[] = [];
 >{a: "a"} : { a: "a"; }
 >a : "a"
 >"a" : "a"
->[] : undefined[]
+>[] : I[]
 
 // not a great example, expect an error
 function foo() {
diff --git a/tests/baselines/reference/controlFlowLoopAnalysis.types b/tests/baselines/reference/controlFlowLoopAnalysis.types
index f3aa3bd2bd0da..2ff07d7dcb549 100644
--- a/tests/baselines/reference/controlFlowLoopAnalysis.types
+++ b/tests/baselines/reference/controlFlowLoopAnalysis.types
@@ -89,7 +89,7 @@ function mapUntilCant<a, b>(
 ): b[] {
     let result: b[] = [];
 >result : b[]
->[] : never[]
+>[] : b[]
 
     for (let index = 0, length = values.length; index < length; index++) {
 >index : number
diff --git a/tests/baselines/reference/controlFlowOptionalChain.types b/tests/baselines/reference/controlFlowOptionalChain.types
index 4e335fca6d287..a44ec9bfe024f 100644
--- a/tests/baselines/reference/controlFlowOptionalChain.types
+++ b/tests/baselines/reference/controlFlowOptionalChain.types
@@ -1955,7 +1955,7 @@ function extractCoordinates(f: Feature): number[] {
 >'test' : "test"
 
         return [];
->[] : never[]
+>[] : number[]
     }
     return f.geometry.coordinates;
 >f.geometry.coordinates : number[]
diff --git a/tests/baselines/reference/crashInsourcePropertyIsRelatableToTargetProperty.types b/tests/baselines/reference/crashInsourcePropertyIsRelatableToTargetProperty.types
index 9237416d0dee7..dd1682cf8bb42 100644
--- a/tests/baselines/reference/crashInsourcePropertyIsRelatableToTargetProperty.types
+++ b/tests/baselines/reference/crashInsourcePropertyIsRelatableToTargetProperty.types
@@ -30,5 +30,5 @@ var a: D = foo("hi", []);
 >foo("hi", []) : (x: "hi", items: string[]) => typeof foo
 >foo : (x: "hi", items: string[]) => typeof foo
 >"hi" : "hi"
->[] : undefined[]
+>[] : string[]
 
diff --git a/tests/baselines/reference/declFileGenericType2.types b/tests/baselines/reference/declFileGenericType2.types
index e56824bb98fec..d83627fcd3d6b 100644
--- a/tests/baselines/reference/declFileGenericType2.types
+++ b/tests/baselines/reference/declFileGenericType2.types
@@ -95,11 +95,11 @@ module templa.dom.mvc.composite {
 >super : typeof AbstractElementController
 
             this._controllers = [];
->this._controllers = [] : undefined[]
+>this._controllers = [] : templa.mvc.IController<templa.mvc.IModel>[]
 >this._controllers : templa.mvc.IController<templa.mvc.IModel>[]
 >this : this
 >_controllers : templa.mvc.IController<templa.mvc.IModel>[]
->[] : undefined[]
+>[] : templa.mvc.IController<templa.mvc.IModel>[]
         }
     }
 }
diff --git a/tests/baselines/reference/destructuringParameterProperties1.types b/tests/baselines/reference/destructuringParameterProperties1.types
index 38174445dcac2..87742f0f9f21d 100644
--- a/tests/baselines/reference/destructuringParameterProperties1.types
+++ b/tests/baselines/reference/destructuringParameterProperties1.types
@@ -42,7 +42,7 @@ var c1 = new C1([]);
 >c1 : C1
 >new C1([]) : C1
 >C1 : typeof C1
->[] : undefined[]
+>[] : string[]
 
 c1 = new C1(["larry", "{curly}", "moe"]);
 >c1 = new C1(["larry", "{curly}", "moe"]) : C1
diff --git a/tests/baselines/reference/destructuringTuple.types b/tests/baselines/reference/destructuringTuple.types
index 0227d82572ddc..36d326e4f0019 100644
--- a/tests/baselines/reference/destructuringTuple.types
+++ b/tests/baselines/reference/destructuringTuple.types
@@ -58,5 +58,5 @@ const [oops2] = [1, 2, 3].reduce((acc: number[], e) => acc.concat(e), []);
 >acc : number[]
 >concat : { (...items: ConcatArray<number>[]): number[]; (...items: (number | ConcatArray<number>)[]): number[]; }
 >e : number
->[] : never[]
+>[] : number[]
 
diff --git a/tests/baselines/reference/directDependenceBetweenTypeAliases.types b/tests/baselines/reference/directDependenceBetweenTypeAliases.types
index e1d6784b327f8..788d92de8b994 100644
--- a/tests/baselines/reference/directDependenceBetweenTypeAliases.types
+++ b/tests/baselines/reference/directDependenceBetweenTypeAliases.types
@@ -40,7 +40,7 @@ type T4 = [number, T4]
 // A type query directly depends on the type of the referenced entity.
 var x: T5[] = []
 >x : any
->[] : undefined[]
+>[] : any[]
 
 type T5 = typeof x
 >T5 : any
diff --git a/tests/baselines/reference/duplicateLocalVariable1.types b/tests/baselines/reference/duplicateLocalVariable1.types
index 8fe3534944f5e..53e39334996b9 100644
--- a/tests/baselines/reference/duplicateLocalVariable1.types
+++ b/tests/baselines/reference/duplicateLocalVariable1.types
@@ -26,7 +26,7 @@ export class TestRunner {
 
     private tests: TestCase[] = [];
 >tests : TestCase[]
->[] : undefined[]
+>[] : TestCase[]
 
     static arrayCompare(arg1: any[], arg2: any[]): boolean {
 >arrayCompare : (arg1: any[], arg2: any[]) => boolean
diff --git a/tests/baselines/reference/elementAccessChain.3.types b/tests/baselines/reference/elementAccessChain.3.types
index b1f1e431a614b..99eca5eb6238e 100644
--- a/tests/baselines/reference/elementAccessChain.3.types
+++ b/tests/baselines/reference/elementAccessChain.3.types
@@ -169,16 +169,16 @@ for (obj?.a["b"] of []);
 >1 : 1
 
 [...obj?.["a"]] = [];
->[...obj?.["a"]] = [] : never[]
+>[...obj?.["a"]] = [] : any[]
 >[...obj?.["a"]] : any[]
 >...obj?.["a"] : any
 >obj?.["a"] : any
 >obj : any
 >"a" : "a"
->[] : never[]
+>[] : any[]
 
 [...obj?.a["b"]] = [];
->[...obj?.a["b"]] = [] : never[]
+>[...obj?.a["b"]] = [] : any[]
 >[...obj?.a["b"]] : any[]
 >...obj?.a["b"] : any
 >obj?.a["b"] : any
@@ -186,5 +186,5 @@ for (obj?.a["b"] of []);
 >obj : any
 >a : any
 >"b" : "b"
->[] : never[]
+>[] : any[]
 
diff --git a/tests/baselines/reference/emptyVariableDeclarationBindingPatterns01_ES5.types b/tests/baselines/reference/emptyVariableDeclarationBindingPatterns01_ES5.types
index 7db78f298293d..368e47fc42190 100644
--- a/tests/baselines/reference/emptyVariableDeclarationBindingPatterns01_ES5.types
+++ b/tests/baselines/reference/emptyVariableDeclarationBindingPatterns01_ES5.types
@@ -86,7 +86,7 @@
 
     const ns: number[][] = [];
 >ns : number[][]
->[] : undefined[]
+>[] : number[][]
 
     for (var {} of ns) {
 >ns : number[][]
diff --git a/tests/baselines/reference/emptyVariableDeclarationBindingPatterns01_ES5iterable.types b/tests/baselines/reference/emptyVariableDeclarationBindingPatterns01_ES5iterable.types
index d5559047aba72..22b5bf06a2ca0 100644
--- a/tests/baselines/reference/emptyVariableDeclarationBindingPatterns01_ES5iterable.types
+++ b/tests/baselines/reference/emptyVariableDeclarationBindingPatterns01_ES5iterable.types
@@ -86,7 +86,7 @@
 
     const ns: number[][] = [];
 >ns : number[][]
->[] : undefined[]
+>[] : number[][]
 
     for (var {} of ns) {
 >ns : number[][]
diff --git a/tests/baselines/reference/emptyVariableDeclarationBindingPatterns01_ES6.types b/tests/baselines/reference/emptyVariableDeclarationBindingPatterns01_ES6.types
index 535562296a3c5..87f72d148fdc8 100644
--- a/tests/baselines/reference/emptyVariableDeclarationBindingPatterns01_ES6.types
+++ b/tests/baselines/reference/emptyVariableDeclarationBindingPatterns01_ES6.types
@@ -86,7 +86,7 @@
 
     const ns: number[][] = [];
 >ns : number[][]
->[] : undefined[]
+>[] : number[][]
 
     for (var {} of ns) {
 >ns : number[][]
diff --git a/tests/baselines/reference/enumLiteralUnionNotWidened.types b/tests/baselines/reference/enumLiteralUnionNotWidened.types
index 87443fbd54906..9e0de3e6371ba 100644
--- a/tests/baselines/reference/enumLiteralUnionNotWidened.types
+++ b/tests/baselines/reference/enumLiteralUnionNotWidened.types
@@ -26,7 +26,7 @@ class List<T>
 {
 	private readonly items: T[] = [];
 >items : T[]
->[] : undefined[]
+>[] : T[]
 }
 
 function asList<T>(arg: T): List<T> { return new List(); }
diff --git a/tests/baselines/reference/exportDefaultWithJSDoc1.types b/tests/baselines/reference/exportDefaultWithJSDoc1.types
index 64668e2b3cc6a..0b371bf2fb005 100644
--- a/tests/baselines/reference/exportDefaultWithJSDoc1.types
+++ b/tests/baselines/reference/exportDefaultWithJSDoc1.types
@@ -6,7 +6,7 @@
 
 /** @type {NumberLike[]} */export default ([ ]);
 >([ ]) : NumberLike[]
->[ ] : undefined[]
+>[ ] : NumberLike[]
 
 === tests/cases/compiler/b.ts ===
 import A from './a'
diff --git a/tests/baselines/reference/exportDefaultWithJSDoc2.types b/tests/baselines/reference/exportDefaultWithJSDoc2.types
index 52a1a103810de..dea14b629fd1f 100644
--- a/tests/baselines/reference/exportDefaultWithJSDoc2.types
+++ b/tests/baselines/reference/exportDefaultWithJSDoc2.types
@@ -6,7 +6,7 @@
 
 export default /** @type {NumberLike[]} */([ ]);
 >([ ]) : NumberLike[]
->[ ] : undefined[]
+>[ ] : NumberLike[]
 
 === tests/cases/compiler/b.ts ===
 import A from './a'
diff --git a/tests/baselines/reference/exportStarNotElided.types b/tests/baselines/reference/exportStarNotElided.types
index 36ed247b215ff..89a0d41da40dc 100644
--- a/tests/baselines/reference/exportStarNotElided.types
+++ b/tests/baselines/reference/exportStarNotElided.types
@@ -1,7 +1,7 @@
 === tests/cases/compiler/register.ts ===
 const r: any[] = [];
 >r : any[]
->[] : undefined[]
+>[] : any[]
 
 export function register(data: any) {
 >register : (data: any) => void
diff --git a/tests/baselines/reference/extendGenericArray.types b/tests/baselines/reference/extendGenericArray.types
index 310fbfe4a7d33..79947cf8d589d 100644
--- a/tests/baselines/reference/extendGenericArray.types
+++ b/tests/baselines/reference/extendGenericArray.types
@@ -6,7 +6,7 @@ interface Array<T> {
 
 var arr: string[] = [];
 >arr : string[]
->[] : undefined[]
+>[] : string[]
 
 var x: number = arr.foo();
 >x : number
diff --git a/tests/baselines/reference/extendGenericArray2.types b/tests/baselines/reference/extendGenericArray2.types
index 6d57179ea5578..4b64f708f6d43 100644
--- a/tests/baselines/reference/extendGenericArray2.types
+++ b/tests/baselines/reference/extendGenericArray2.types
@@ -8,7 +8,7 @@ interface Array<T> extends IFoo<T> { }
 
 var arr: string[] = [];
 >arr : string[]
->[] : undefined[]
+>[] : string[]
 
 var y: number = arr.x;
 >y : number
diff --git a/tests/baselines/reference/fatarrowfunctionsOptionalArgsErrors1.types b/tests/baselines/reference/fatarrowfunctionsOptionalArgsErrors1.types
index 0eb27f0484e94..6e1e3c40b8d38 100644
--- a/tests/baselines/reference/fatarrowfunctionsOptionalArgsErrors1.types
+++ b/tests/baselines/reference/fatarrowfunctionsOptionalArgsErrors1.types
@@ -18,7 +18,7 @@
 (...arg:number [] = []) => 104;
 >(...arg:number [] = []) => 104 : (...arg?: number[]) => number
 >arg : number[]
->[] : undefined[]
+>[] : number[]
 >104 : 104
 
 // Uninitialized parameter makes the initialized one required
diff --git a/tests/baselines/reference/forStatementsMultipleValidDecl.types b/tests/baselines/reference/forStatementsMultipleValidDecl.types
index d8cba0a8b2ef3..f952780c7a247 100644
--- a/tests/baselines/reference/forStatementsMultipleValidDecl.types
+++ b/tests/baselines/reference/forStatementsMultipleValidDecl.types
@@ -120,11 +120,11 @@ for (var a = ['a', 'b']; ;) { }
 for (var a = <string[]>[]; ;) { }
 >a : string[]
 ><string[]>[] : string[]
->[] : undefined[]
+>[] : string[]
 
 for (var a: string[] = []; ;) { }
 >a : string[]
->[] : undefined[]
+>[] : string[]
 
 for (var a = new Array<string>(); ;) { }
 >a : string[]
diff --git a/tests/baselines/reference/functionSubtypingOfVarArgs2.types b/tests/baselines/reference/functionSubtypingOfVarArgs2.types
index 3aa5b7a7a0025..5313cc8400a29 100644
--- a/tests/baselines/reference/functionSubtypingOfVarArgs2.types
+++ b/tests/baselines/reference/functionSubtypingOfVarArgs2.types
@@ -5,7 +5,7 @@ class EventBase {
     private _listeners: { (...args: any[]): void; }[] = [];
 >_listeners : ((...args: any[]) => void)[]
 >args : any[]
->[] : undefined[]
+>[] : ((...args: any[]) => void)[]
 
     add(listener: (...args: any[]) => void): void {
 >add : (listener: (...args: any[]) => void) => void
diff --git a/tests/baselines/reference/functionTypeArgumentArrayAssignment.types b/tests/baselines/reference/functionTypeArgumentArrayAssignment.types
index b3eafd7194a89..a8110db72760e 100644
--- a/tests/baselines/reference/functionTypeArgumentArrayAssignment.types
+++ b/tests/baselines/reference/functionTypeArgumentArrayAssignment.types
@@ -15,7 +15,7 @@ module test {
 
         var ys: U[] = [];
 >ys : U[]
->[] : undefined[]
+>[] : U[]
     }
 }
 
diff --git a/tests/baselines/reference/functionTypeArgumentAssignmentCompat.types b/tests/baselines/reference/functionTypeArgumentAssignmentCompat.types
index 00f645e4560c8..98635528cbb01 100644
--- a/tests/baselines/reference/functionTypeArgumentAssignmentCompat.types
+++ b/tests/baselines/reference/functionTypeArgumentAssignmentCompat.types
@@ -11,8 +11,8 @@ var g : {
 
  <S>() : S[];
 } = () => [];
->() => [] : () => any[]
->[] : undefined[]
+>() => [] : <S>() => S[]
+>[] : S[]
 
 f = g;
 >f = g : <S>() => S[]
diff --git a/tests/baselines/reference/genericArray0.types b/tests/baselines/reference/genericArray0.types
index d9c847af96d5e..0045334df58ab 100644
--- a/tests/baselines/reference/genericArray0.types
+++ b/tests/baselines/reference/genericArray0.types
@@ -13,6 +13,6 @@ function map<U>() {
 
     var ys: U[] = [];
 >ys : U[]
->[] : undefined[]
+>[] : U[]
 }
 
diff --git a/tests/baselines/reference/genericCallWithArrayLiteralArgs.types b/tests/baselines/reference/genericCallWithArrayLiteralArgs.types
index a7b81335b466f..f1c36c2342409 100644
--- a/tests/baselines/reference/genericCallWithArrayLiteralArgs.types
+++ b/tests/baselines/reference/genericCallWithArrayLiteralArgs.types
@@ -35,13 +35,13 @@ var r2 = foo([]); // any[]
 >r2 : any[]
 >foo([]) : any[]
 >foo : <T>(t: T) => T
->[] : undefined[]
+>[] : any[]
 
 var r3 = foo<number[]>([]); // number[]
 >r3 : number[]
 >foo<number[]>([]) : number[]
 >foo : <T>(t: T) => T
->[] : undefined[]
+>[] : number[]
 
 var r4 = foo([1, '']); // {}[]
 >r4 : (string | number)[]
diff --git a/tests/baselines/reference/genericClassWithStaticsUsingTypeArguments.types b/tests/baselines/reference/genericClassWithStaticsUsingTypeArguments.types
index 5a417fd478058..f1c133ec54d23 100644
--- a/tests/baselines/reference/genericClassWithStaticsUsingTypeArguments.types
+++ b/tests/baselines/reference/genericClassWithStaticsUsingTypeArguments.types
@@ -13,7 +13,7 @@ class Foo<T> {
 
     static c: T[] = [];
 >c : T[]
->[] : undefined[]
+>[] : T[]
 
     static d = false || ((x: T) => x || undefined)(null)
 >d : any
diff --git a/tests/baselines/reference/genericFunctionInference1.types b/tests/baselines/reference/genericFunctionInference1.types
index 9ce0b1b2b24bb..1c4ce35bc53df 100644
--- a/tests/baselines/reference/genericFunctionInference1.types
+++ b/tests/baselines/reference/genericFunctionInference1.types
@@ -640,7 +640,7 @@ export interface Data {
 
 var data: Data[] = [];
 >data : Data[]
->[] : never[]
+>[] : Data[]
 
 declare function toKeys<a>(values: a[], toKey: (value: a) => string): string[];
 >toKeys : <a>(values: a[], toKey: (value: a) => string) => string[]
diff --git a/tests/baselines/reference/genericTypeArgumentInference1.types b/tests/baselines/reference/genericTypeArgumentInference1.types
index dd3ab70adac30..44d20dbe6658e 100644
--- a/tests/baselines/reference/genericTypeArgumentInference1.types
+++ b/tests/baselines/reference/genericTypeArgumentInference1.types
@@ -55,7 +55,7 @@ var r3 = _.all([], _.identity);
 >_.all : <T>(list: T[], iterator?: Underscore.Iterator<T, boolean>, context?: any) => T
 >_ : Underscore.Static
 >all : <T>(list: T[], iterator?: Underscore.Iterator<T, boolean>, context?: any) => T
->[] : undefined[]
+>[] : any[]
 >_.identity : <T>(value: T) => T
 >_ : Underscore.Static
 >identity : <T>(value: T) => T
diff --git a/tests/baselines/reference/heterogeneousArrayAndOverloads.types b/tests/baselines/reference/heterogeneousArrayAndOverloads.types
index beb59c9eab8a0..b9eb697a99571 100644
--- a/tests/baselines/reference/heterogeneousArrayAndOverloads.types
+++ b/tests/baselines/reference/heterogeneousArrayAndOverloads.types
@@ -41,7 +41,7 @@ class arrTest {
 >this.test : { (arg1: number[]): any; (arg1: string[]): any; }
 >this : this
 >test : { (arg1: number[]): any; (arg1: string[]): any; }
->[] : undefined[]
+>[] : number[]
 
         this.test([1, 2, "hi", 5]); // Error
 >this.test([1, 2, "hi", 5]) : any
diff --git a/tests/baselines/reference/heterogeneousArrayLiterals.types b/tests/baselines/reference/heterogeneousArrayLiterals.types
index b9a556de82a70..ab766a1c532f9 100644
--- a/tests/baselines/reference/heterogeneousArrayLiterals.types
+++ b/tests/baselines/reference/heterogeneousArrayLiterals.types
@@ -250,7 +250,7 @@ module WithContextualType {
 
     var c: Derived[] = [];
 >c : Derived[]
->[] : undefined[]
+>[] : Derived[]
 
     var d: { (): Base }[] = [() => derived, () => derived2];
 >d : (() => Base)[]
diff --git a/tests/baselines/reference/implicitAnyWidenToAny.types b/tests/baselines/reference/implicitAnyWidenToAny.types
index f8aa582469f5a..b00a2b2c28a51 100644
--- a/tests/baselines/reference/implicitAnyWidenToAny.types
+++ b/tests/baselines/reference/implicitAnyWidenToAny.types
@@ -59,7 +59,7 @@ var array1 = ["Bob",2];
 
 var array2: any[] = [];
 >array2 : any[]
->[] : undefined[]
+>[] : any[]
 
 var array3: any[] = [null, undefined];
 >array3 : any[]
diff --git a/tests/baselines/reference/inferFromGenericFunctionReturnTypes3.types b/tests/baselines/reference/inferFromGenericFunctionReturnTypes3.types
index bd2164e99e1d6..81392f2de83e8 100644
--- a/tests/baselines/reference/inferFromGenericFunctionReturnTypes3.types
+++ b/tests/baselines/reference/inferFromGenericFunctionReturnTypes3.types
@@ -102,7 +102,7 @@ interface FolderContentItem {
 
 let a: FolderContentItem[] = [];
 >a : FolderContentItem[]
->[] : never[]
+>[] : FolderContentItem[]
 
 a = [1, 2, 3, 4, 5].map(v => ({ type: 'folder' }));
 >a = [1, 2, 3, 4, 5].map(v => ({ type: 'folder' })) : { type: "folder"; }[]
@@ -193,7 +193,7 @@ function bug(): Diagnostic[] {
 
 	let values: any[] = [];
 >values : any[]
->[] : never[]
+>[] : any[]
 
 	return values.map((value) => {
 >values.map((value) => {		return {			severity: DiagnosticSeverity.Error,			message: 'message'		}	}) : { severity: 1; message: string; }[]
diff --git a/tests/baselines/reference/inferenceLimit.types b/tests/baselines/reference/inferenceLimit.types
index aa49bdd73b77a..302cfd39e1c37 100644
--- a/tests/baselines/reference/inferenceLimit.types
+++ b/tests/baselines/reference/inferenceLimit.types
@@ -26,7 +26,7 @@ export class BrokenClass {
     let result: Array<MyModule.MyModel> = [];
 >result : MyModule.MyModel[]
 >MyModule : any
->[] : undefined[]
+>[] : MyModule.MyModel[]
 
     let populateItems = (order) => {
 >populateItems : (order: any) => Promise<unknown>
diff --git a/tests/baselines/reference/inferentiallyTypingAnEmptyArray.types b/tests/baselines/reference/inferentiallyTypingAnEmptyArray.types
index 293f4946e91d0..0aecfdf320521 100644
--- a/tests/baselines/reference/inferentiallyTypingAnEmptyArray.types
+++ b/tests/baselines/reference/inferentiallyTypingAnEmptyArray.types
@@ -22,6 +22,6 @@ foo([]).bar;
 >foo([]).bar : any
 >foo([]) : any
 >foo : <T>(arr: T[]) => T
->[] : undefined[]
+>[] : any[]
 >bar : any
 
diff --git a/tests/baselines/reference/interfaceAssignmentCompat.types b/tests/baselines/reference/interfaceAssignmentCompat.types
index b1135f1d27ae3..d41220297991b 100644
--- a/tests/baselines/reference/interfaceAssignmentCompat.types
+++ b/tests/baselines/reference/interfaceAssignmentCompat.types
@@ -60,7 +60,7 @@ module M {
 
         var x:IEye[]= [];
 >x : IEye[]
->[] : undefined[]
+>[] : IEye[]
 
         var result="";
 >result : string
@@ -150,7 +150,7 @@ module M {
 
         var eeks:IFrenchEye[] = [];
 >eeks : IFrenchEye[]
->[] : undefined[]
+>[] : IFrenchEye[]
 
         for (var j=z.length=1;j>=0;j--) {
 >j : number
diff --git a/tests/baselines/reference/jsDeclarationsJSDocRedirectedLookups.types b/tests/baselines/reference/jsDeclarationsJSDocRedirectedLookups.types
index f86bca410ef66..9d20ce0ef75c0 100644
--- a/tests/baselines/reference/jsDeclarationsJSDocRedirectedLookups.types
+++ b/tests/baselines/reference/jsDeclarationsJSDocRedirectedLookups.types
@@ -38,7 +38,7 @@
 
 /** @type {array} */const i = [];
 >i : any[]
->[] : never[]
+>[] : any[]
 
 /** @type {promise} */const j = Promise.resolve(0);
 >j : Promise<any>
diff --git a/tests/baselines/reference/jsDeclarationsReferenceToClassInstanceCrossFile.types b/tests/baselines/reference/jsDeclarationsReferenceToClassInstanceCrossFile.types
index 5b90275da04c5..5de70f69b25c6 100644
--- a/tests/baselines/reference/jsDeclarationsReferenceToClassInstanceCrossFile.types
+++ b/tests/baselines/reference/jsDeclarationsReferenceToClassInstanceCrossFile.types
@@ -64,11 +64,11 @@ class Render {
          * @type {Rectangle[]}
          */
         this.objects = [];
->this.objects = [] : undefined[]
+>this.objects = [] : Rectangle[]
 >this.objects : Rectangle[]
 >this : this
 >objects : Rectangle[]
->[] : undefined[]
+>[] : Rectangle[]
     }
     /**
      * Adds a rectangle
diff --git a/tests/baselines/reference/jsDeclarationsTypeReassignmentFromDeclaration.types b/tests/baselines/reference/jsDeclarationsTypeReassignmentFromDeclaration.types
index fc514b7a0bc58..e5c12f4d6ccc1 100644
--- a/tests/baselines/reference/jsDeclarationsTypeReassignmentFromDeclaration.types
+++ b/tests/baselines/reference/jsDeclarationsTypeReassignmentFromDeclaration.types
@@ -13,7 +13,7 @@ export = items;
 /** @type {typeof import("/some-mod")} */
 const items = [];
 >items : Item[]
->[] : undefined[]
+>[] : Item[]
 
 module.exports = items;
 >module.exports = items : { [n: number]: Item; length: number; toString(): string; toLocaleString(): string; pop(): Item; push(...items: Item[]): number; concat(...items: ConcatArray<Item>[]): Item[]; concat(...items: (Item | ConcatArray<Item>)[]): Item[]; join(separator?: string): string; reverse(): Item[]; shift(): Item; slice(start?: number, end?: number): Item[]; sort(compareFn?: (a: Item, b: Item) => number): Item[]; splice(start: number, deleteCount?: number): Item[]; splice(start: number, deleteCount: number, ...items: Item[]): Item[]; unshift(...items: Item[]): number; indexOf(searchElement: Item, fromIndex?: number): number; lastIndexOf(searchElement: Item, fromIndex?: number): number; every<S extends Item>(predicate: (value: Item, index: number, array: Item[]) => value is S, thisArg?: any): this is S[]; every(predicate: (value: Item, index: number, array: Item[]) => unknown, thisArg?: any): boolean; some(predicate: (value: Item, index: number, array: Item[]) => unknown, thisArg?: any): boolean; forEach(callbackfn: (value: Item, index: number, array: Item[]) => void, thisArg?: any): void; map<U>(callbackfn: (value: Item, index: number, array: Item[]) => U, thisArg?: any): U[]; filter<S extends Item>(predicate: (value: Item, index: number, array: Item[]) => value is S, thisArg?: any): S[]; filter(predicate: (value: Item, index: number, array: Item[]) => unknown, thisArg?: any): Item[]; reduce(callbackfn: (previousValue: Item, currentValue: Item, currentIndex: number, array: Item[]) => Item): Item; reduce(callbackfn: (previousValue: Item, currentValue: Item, currentIndex: number, array: Item[]) => Item, initialValue: Item): Item; reduce<U>(callbackfn: (previousValue: U, currentValue: Item, currentIndex: number, array: Item[]) => U, initialValue: U): U; reduceRight(callbackfn: (previousValue: Item, currentValue: Item, currentIndex: number, array: Item[]) => Item): Item; reduceRight(callbackfn: (previousValue: Item, currentValue: Item, currentIndex: number, array: Item[]) => Item, initialValue: Item): Item; reduceRight<U>(callbackfn: (previousValue: U, currentValue: Item, currentIndex: number, array: Item[]) => U, initialValue: U): U; find<S extends Item>(predicate: (this: void, value: Item, index: number, obj: Item[]) => value is S, thisArg?: any): S; find(predicate: (value: Item, index: number, obj: Item[]) => unknown, thisArg?: any): Item; findIndex(predicate: (value: Item, index: number, obj: Item[]) => unknown, thisArg?: any): number; fill(value: Item, start?: number, end?: number): Item[]; copyWithin(target: number, start: number, end?: number): Item[]; entries(): IterableIterator<[number, Item]>; keys(): IterableIterator<number>; values(): IterableIterator<Item>; [Symbol.iterator](): IterableIterator<Item>; [Symbol.unscopables](): { copyWithin: boolean; entries: boolean; fill: boolean; find: boolean; findIndex: boolean; keys: boolean; values: boolean; }; }
diff --git a/tests/baselines/reference/jsFileClassPropertyType2.types b/tests/baselines/reference/jsFileClassPropertyType2.types
index be99637574161..65a9423ff08bc 100644
--- a/tests/baselines/reference/jsFileClassPropertyType2.types
+++ b/tests/baselines/reference/jsFileClassPropertyType2.types
@@ -5,11 +5,11 @@ class C {
     constructor() {
       /** @type {number[]}*/
       this.p = [];
->this.p = [] : undefined[]
+>this.p = [] : number[]
 >this.p : number[]
 >this : this
 >p : number[]
->[] : undefined[]
+>[] : number[]
   }
 }
 
diff --git a/tests/baselines/reference/lambdaArgCrash.types b/tests/baselines/reference/lambdaArgCrash.types
index 534d2838a3999..b439051b0c851 100644
--- a/tests/baselines/reference/lambdaArgCrash.types
+++ b/tests/baselines/reference/lambdaArgCrash.types
@@ -4,18 +4,18 @@ class Event {
 
 	 private _listeners: any[] = [];
 >_listeners : any[]
->[] : undefined[]
+>[] : any[]
 
 	 constructor () {
 
 		 // TODO: remove
 
 		 this._listeners = [];
->this._listeners = [] : undefined[]
+>this._listeners = [] : any[]
 >this._listeners : any[]
 >this : this
 >_listeners : any[]
->[] : undefined[]
+>[] : any[]
 
 	}
 
diff --git a/tests/baselines/reference/mappedTypeOverlappingStringEnumKeys.types b/tests/baselines/reference/mappedTypeOverlappingStringEnumKeys.types
index ae58d3f12ddc3..15d5129babed9 100644
--- a/tests/baselines/reference/mappedTypeOverlappingStringEnumKeys.types
+++ b/tests/baselines/reference/mappedTypeOverlappingStringEnumKeys.types
@@ -85,7 +85,7 @@ const catMap: CatMap = {
   dog: [] as never[]
 >dog : never[]
 >[] as never[] : never[]
->[] : undefined[]
+>[] : never[]
 
 };
 
diff --git a/tests/baselines/reference/memberVariableDeclarations1.types b/tests/baselines/reference/memberVariableDeclarations1.types
index 6d768f9705576..7785fbbe5c70a 100644
--- a/tests/baselines/reference/memberVariableDeclarations1.types
+++ b/tests/baselines/reference/memberVariableDeclarations1.types
@@ -20,7 +20,7 @@ class Employee {
 
     public reports: Employee[] = [];
 >reports : Employee[]
->[] : undefined[]
+>[] : Employee[]
 }
 
 class Employee2 {
@@ -57,11 +57,11 @@ class Employee2 {
 >null : null
 
         this.reports = [];
->this.reports = [] : undefined[]
+>this.reports = [] : Employee[]
 >this.reports : Employee[]
 >this : this
 >reports : Employee[]
->[] : undefined[]
+>[] : Employee[]
     }
 }
 
diff --git a/tests/baselines/reference/mismatchedExplicitTypeParameterAndArgumentType.types b/tests/baselines/reference/mismatchedExplicitTypeParameterAndArgumentType.types
index 6adf391870603..a29cd8fc77f2d 100644
--- a/tests/baselines/reference/mismatchedExplicitTypeParameterAndArgumentType.types
+++ b/tests/baselines/reference/mismatchedExplicitTypeParameterAndArgumentType.types
@@ -7,7 +7,7 @@ function map<T, U>(xs: T[], f: (x: T) => U) {
 
     var ys: U[] = [];
 >ys : U[]
->[] : undefined[]
+>[] : U[]
 
     xs.forEach(x => ys.push(f(x)));
 >xs.forEach(x => ys.push(f(x))) : void
diff --git a/tests/baselines/reference/moduleClassArrayCodeGenTest.types b/tests/baselines/reference/moduleClassArrayCodeGenTest.types
index 4a3c09853a343..9a5bd89a0064b 100644
--- a/tests/baselines/reference/moduleClassArrayCodeGenTest.types
+++ b/tests/baselines/reference/moduleClassArrayCodeGenTest.types
@@ -14,10 +14,10 @@ module M
 var t: M.A[] = [];
 >t : M.A[]
 >M : any
->[] : undefined[]
+>[] : M.A[]
 
 var t2: M.B[] = [];
 >t2 : M.B[]
 >M : any
->[] : undefined[]
+>[] : M.B[]
 
diff --git a/tests/baselines/reference/multiline.types b/tests/baselines/reference/multiline.types
index b83f82571c232..68f590552c0b2 100644
--- a/tests/baselines/reference/multiline.types
+++ b/tests/baselines/reference/multiline.types
@@ -1,7 +1,7 @@
 === tests/cases/conformance/directives/a.ts ===
 export const texts: string[] = [];
 >texts : string[]
->[] : undefined[]
+>[] : string[]
 
 /**
  @ts-ignore */
diff --git a/tests/baselines/reference/neverInference.types b/tests/baselines/reference/neverInference.types
index d6b0da3c3d6e9..e4869c7c0666c 100644
--- a/tests/baselines/reference/neverInference.types
+++ b/tests/baselines/reference/neverInference.types
@@ -54,7 +54,7 @@ const list: LinkedList<number> = mkList([], compareNumbers);
 >list : LinkedList<number>
 >mkList([], compareNumbers) : LinkedList<number>
 >mkList : <T>(items: T[], comparator: Comparator<T>) => LinkedList<T>
->[] : never[]
+>[] : number[]
 >compareNumbers : (x: number, y: number) => number
 
 // Repro from #19858
@@ -76,7 +76,7 @@ f2(Array.from([0]), [], (a1, a2) => a1 - a2);
 >from : { <T>(arrayLike: ArrayLike<T>): T[]; <T, U>(arrayLike: ArrayLike<T>, mapfn: (v: T, k: number) => U, thisArg?: any): U[]; <T>(iterable: Iterable<T> | ArrayLike<T>): T[]; <T, U>(iterable: Iterable<T> | ArrayLike<T>, mapfn: (v: T, k: number) => U, thisArg?: any): U[]; }
 >[0] : number[]
 >0 : 0
->[] : never[]
+>[] : number[]
 >(a1, a2) => a1 - a2 : (a1: number, a2: number) => number
 >a1 : number
 >a2 : number
diff --git a/tests/baselines/reference/neverTypeErrors1.types b/tests/baselines/reference/neverTypeErrors1.types
index f577b4457e1f0..ea58631b67de7 100644
--- a/tests/baselines/reference/neverTypeErrors1.types
+++ b/tests/baselines/reference/neverTypeErrors1.types
@@ -72,7 +72,7 @@ function f5() {
 
     let x: never[] = [];  // Ok
 >x : never[]
->[] : undefined[]
+>[] : never[]
 }
 
 // Repro from #46032
@@ -95,11 +95,11 @@ function func(): { value: Union[] } {
 >value : never[]
 
     return {
->{        value: [],    } : { value: undefined[]; }
+>{        value: [],    } : { value: never[]; }
 
         value: [],
->value : undefined[]
->[] : undefined[]
+>value : never[]
+>[] : never[]
 
     };
 }
diff --git a/tests/baselines/reference/noAsConstNameLookup.types b/tests/baselines/reference/noAsConstNameLookup.types
index 42a06c8530fb2..7e9b0979e5316 100644
--- a/tests/baselines/reference/noAsConstNameLookup.types
+++ b/tests/baselines/reference/noAsConstNameLookup.types
@@ -14,7 +14,7 @@ export class FeatureRunner<W extends Store> {
 
     private readonly cleaners: Cleaner[] = []
 >cleaners : Cleaner[]
->[] : never[]
+>[] : Cleaner[]
 
     async runFeature(): Promise<any> {
 >runFeature : () => Promise<any>
diff --git a/tests/baselines/reference/noImplicitAnyForIn.types b/tests/baselines/reference/noImplicitAnyForIn.types
index bd8cb1c8c200c..0a9e025e0aa62 100644
--- a/tests/baselines/reference/noImplicitAnyForIn.types
+++ b/tests/baselines/reference/noImplicitAnyForIn.types
@@ -84,7 +84,7 @@ var n = [[]] || [];
 >[[]] || [] : undefined[][]
 >[[]] : undefined[][]
 >[] : undefined[]
->[] : undefined[]
+>[] : undefined[][]
 
 for (n[idx++] in m);
 >n[idx++] : any[]
diff --git a/tests/baselines/reference/nullishCoalescingOperator12.types b/tests/baselines/reference/nullishCoalescingOperator12.types
index d0b52b7afbfa2..93d7728afddcd 100644
--- a/tests/baselines/reference/nullishCoalescingOperator12.types
+++ b/tests/baselines/reference/nullishCoalescingOperator12.types
@@ -2,9 +2,9 @@
 const obj: { arr: any[] } = { arr: [] };
 >obj : { arr: any[]; }
 >arr : any[]
->{ arr: [] } : { arr: never[]; }
->arr : never[]
->[] : never[]
+>{ arr: [] } : { arr: any[]; }
+>arr : any[]
+>[] : any[]
 
 for (const i of obj?.arr ?? []) { }
 >i : any
@@ -12,5 +12,5 @@ for (const i of obj?.arr ?? []) { }
 >obj?.arr : any[]
 >obj : { arr: any[]; }
 >arr : any[]
->[] : never[]
+>[] : any[]
 
diff --git a/tests/baselines/reference/optionalParamArgsTest.types b/tests/baselines/reference/optionalParamArgsTest.types
index c80ef5f165c44..af8502046c16d 100644
--- a/tests/baselines/reference/optionalParamArgsTest.types
+++ b/tests/baselines/reference/optionalParamArgsTest.types
@@ -489,9 +489,9 @@ function fnOpt1(id: number, children: number[] = [], expectedPath: number[] = []
 >fnOpt1 : (id: number, children?: number[], expectedPath?: number[], isRoot?: boolean) => void
 >id : number
 >children : number[]
->[] : undefined[]
+>[] : number[]
 >expectedPath : number[]
->[] : undefined[]
+>[] : number[]
 >isRoot : boolean
 
 function fnOpt2(id: number, children?: number[], expectedPath?: number[], isRoot?: boolean): void {}
diff --git a/tests/baselines/reference/overloadResolutionOverNonCTObjectLit.types b/tests/baselines/reference/overloadResolutionOverNonCTObjectLit.types
index 96065c676e213..9f8370510e17c 100644
--- a/tests/baselines/reference/overloadResolutionOverNonCTObjectLit.types
+++ b/tests/baselines/reference/overloadResolutionOverNonCTObjectLit.types
@@ -29,7 +29,7 @@ module Bugs {
 
                                 var tokens:IToken[]= [];
 >tokens : IToken[]
->[] : undefined[]
+>[] : IToken[]
 
                                 tokens.push({ startIndex: 1, type: '', bracket: 3 });
 >tokens.push({ startIndex: 1, type: '', bracket: 3 }) : number
diff --git a/tests/baselines/reference/overloadingOnConstants2.types b/tests/baselines/reference/overloadingOnConstants2.types
index 4c2dfe0204562..a6262dbd08df1 100644
--- a/tests/baselines/reference/overloadingOnConstants2.types
+++ b/tests/baselines/reference/overloadingOnConstants2.types
@@ -40,21 +40,21 @@ var a: D = foo("hi", []); // D
 >foo("hi", []) : D
 >foo : { (x: "hi", items: string[]): D; (x: "bye", items: string[]): E; }
 >"hi" : "hi"
->[] : undefined[]
+>[] : string[]
 
 var b: E = foo("bye", []); // E 
 >b : E
 >foo("bye", []) : E
 >foo : { (x: "hi", items: string[]): D; (x: "bye", items: string[]): E; }
 >"bye" : "bye"
->[] : undefined[]
+>[] : string[]
 
 var c = foo("um", []); // error
 >c : D & E
 >foo("um", []) : D & E
 >foo : { (x: "hi", items: string[]): D; (x: "bye", items: string[]): E; }
 >"um" : "um"
->[] : undefined[]
+>[] : string[]
 
 
 //function bar(x: "hi", items: string[]): D;
@@ -82,19 +82,19 @@ var d: D = bar("hi", []); // D
 >bar("hi", []) : C
 >bar : { (x: "bye", items: string[]): E; (x: string, items: string[]): C; }
 >"hi" : "hi"
->[] : undefined[]
+>[] : string[]
 
 var e: E = bar("bye", []); // E 
 >e : E
 >bar("bye", []) : E
 >bar : { (x: "bye", items: string[]): E; (x: string, items: string[]): C; }
 >"bye" : "bye"
->[] : undefined[]
+>[] : string[]
 
 var f: C = bar("um", []); // C
 >f : C
 >bar("um", []) : C
 >bar : { (x: "bye", items: string[]): E; (x: string, items: string[]): C; }
 >"um" : "um"
->[] : undefined[]
+>[] : string[]
 
diff --git a/tests/baselines/reference/parserRealSource11.types b/tests/baselines/reference/parserRealSource11.types
index be7f8b2f6015c..c928d5bae6b7c 100644
--- a/tests/baselines/reference/parserRealSource11.types
+++ b/tests/baselines/reference/parserRealSource11.types
@@ -4356,7 +4356,7 @@ module TypeScript {
 
         public freeVariables: Symbol[] = [];
 >freeVariables : Symbol[]
->[] : undefined[]
+>[] : Symbol[]
 
         public unitIndex = -1;
 >unitIndex : number
@@ -4377,7 +4377,7 @@ module TypeScript {
 
         public innerStaticFuncs: FuncDecl[] = [];
 >innerStaticFuncs : FuncDecl[]
->[] : undefined[]
+>[] : FuncDecl[]
 
         public isTargetTypedAsMethod = false;
 >isTargetTypedAsMethod : boolean
@@ -4401,7 +4401,7 @@ module TypeScript {
 
         public returnStatementsWithExpressions: ReturnStatement[] = [];
 >returnStatementsWithExpressions : ReturnStatement[]
->[] : undefined[]
+>[] : ReturnStatement[]
 
         public scopeType: Type = null; // Type of the FuncDecl, before target typing
 >scopeType : Type
@@ -5048,7 +5048,7 @@ module TypeScript {
 
         public referencedFiles: IFileReference[] = [];
 >referencedFiles : IFileReference[]
->[] : undefined[]
+>[] : IFileReference[]
 
         public requiresGlobal = false;
 >requiresGlobal : boolean
@@ -5437,7 +5437,7 @@ module TypeScript {
 
         public amdDependencies: string[] = [];
 >amdDependencies : string[]
->[] : undefined[]
+>[] : string[]
 
         public vars: ASTList;
 >vars : ASTList
diff --git a/tests/baselines/reference/parserRealSource12.types b/tests/baselines/reference/parserRealSource12.types
index 0f7b67d91217d..f4b1a0259fbc9 100644
--- a/tests/baselines/reference/parserRealSource12.types
+++ b/tests/baselines/reference/parserRealSource12.types
@@ -215,7 +215,7 @@ module TypeScript {
 
         private childrenWalkers: IAstWalkChildren[] = [];
 >childrenWalkers : IAstWalkChildren[]
->[] : undefined[]
+>[] : IAstWalkChildren[]
 
         constructor () {
             this.initChildrenWalkers();
diff --git a/tests/baselines/reference/parserRealSource14.types b/tests/baselines/reference/parserRealSource14.types
index 6bff1f2cd6f5f..da217a9a86634 100644
--- a/tests/baselines/reference/parserRealSource14.types
+++ b/tests/baselines/reference/parserRealSource14.types
@@ -71,7 +71,7 @@ module TypeScript {
         public asts: TypeScript.AST[] = [];
 >asts : TypeScript.AST[]
 >TypeScript : any
->[] : undefined[]
+>[] : TypeScript.AST[]
 
         public top: number = -1;
 >top : number
diff --git a/tests/baselines/reference/parserRealSource4.types b/tests/baselines/reference/parserRealSource4.types
index f46c6835aaad6..79dfa3bcc5dfa 100644
--- a/tests/baselines/reference/parserRealSource4.types
+++ b/tests/baselines/reference/parserRealSource4.types
@@ -115,7 +115,7 @@ module TypeScript {
 
             var result: string[] = [];
 >result : string[]
->[] : undefined[]
+>[] : string[]
 
             for (var k in this.table) {
 >k : string
diff --git a/tests/baselines/reference/parserRealSource5.types b/tests/baselines/reference/parserRealSource5.types
index fcce9a438cb38..5fcb13ca919c5 100644
--- a/tests/baselines/reference/parserRealSource5.types
+++ b/tests/baselines/reference/parserRealSource5.types
@@ -21,7 +21,7 @@ module TypeScript {
 
         public indentStrings: string[] = [];
 >indentStrings : string[]
->[] : undefined[]
+>[] : string[]
 
         public indentAmt = 0;
 >indentAmt : number
diff --git a/tests/baselines/reference/parserharness.types b/tests/baselines/reference/parserharness.types
index 498e9bf7ea7ce..ef3b00b9fe9f1 100644
--- a/tests/baselines/reference/parserharness.types
+++ b/tests/baselines/reference/parserharness.types
@@ -236,7 +236,7 @@ module Harness {
 
         export var bugIds: string[] = [];
 >bugIds : string[]
->[] : undefined[]
+>[] : string[]
 
         export var throwAssertError = (error: Error) => {
 >throwAssertError : (error: Error) => never
@@ -967,7 +967,7 @@ module Harness {
     // Logger-related functions
     var loggers: ILogger[] = [];
 >loggers : ILogger[]
->[] : undefined[]
+>[] : ILogger[]
 
     export function registerLogger(logger: ILogger) {
 >registerLogger : (logger: ILogger) => void
@@ -1038,7 +1038,7 @@ module Harness {
         // The current stack of Runnable objects
         static currentStack: Runnable[] = [];
 >currentStack : Runnable[]
->[] : undefined[]
+>[] : Runnable[]
 
         // The error, if any, that occurred when running 'block'
         public error: Error = null;
@@ -1053,12 +1053,12 @@ module Harness {
         // A list of bugs impacting this object
         public bugs: string[] = [];
 >bugs : string[]
->[] : undefined[]
+>[] : string[]
 
         // A list of all our child Runnables
         public children: Runnable[] = [];
 >children : Runnable[]
->[] : undefined[]
+>[] : Runnable[]
 
         public addChild(child: Runnable): void {
 >addChild : (child: Runnable) => void
@@ -1205,7 +1205,7 @@ module Harness {
         static errorHandlerStack: { (e: Error): void; }[] = [];
 >errorHandlerStack : ((e: Error) => void)[]
 >e : Error
->[] : undefined[]
+>[] : ((e: Error) => void)[]
 
         static pushGlobalErrorHandler(done: IDone) {
 >pushGlobalErrorHandler : (done: IDone) => void
@@ -1973,7 +1973,7 @@ module Harness {
 
             public data: number[] = [];
 >data : number[]
->[] : undefined[]
+>[] : number[]
 
             public add(value: number) {
 >add : (value: number) => void
@@ -2255,7 +2255,7 @@ module Harness {
 
         export var benchmarks: { new (): Benchmark; }[] = [];
 >benchmarks : (new () => Benchmark)[]
->[] : undefined[]
+>[] : (new () => Benchmark)[]
 
         var timeFunction: (
 >timeFunction : (benchmark: Benchmark, description?: string, name?: string, f?: (bench?: {    (): void;}) => void) => void
@@ -2550,7 +2550,7 @@ module Harness {
 
             public lines: string[] = [];
 >lines : string[]
->[] : undefined[]
+>[] : string[]
 
             public currentLine = "";
 >currentLine : string
@@ -2626,11 +2626,11 @@ module Harness {
 >reset : () => void
 
                 this.lines = [];
->this.lines = [] : undefined[]
+>this.lines = [] : string[]
 >this.lines : string[]
 >this : this
 >lines : string[]
->[] : undefined[]
+>[] : string[]
 
                 this.currentLine = "";
 >this.currentLine = "" : ""
@@ -2733,7 +2733,7 @@ module Harness {
 >result : { filename: string; file: WriterAggregator; }[]
 >filename : string
 >file : WriterAggregator
->[] : undefined[]
+>[] : { filename: string; file: WriterAggregator; }[]
 
                 for (var p in this.fileCollection) {
 >p : string
@@ -3751,7 +3751,7 @@ module Harness {
 
                 var matchingIdentifiers: Type[] = [];
 >matchingIdentifiers : Type[]
->[] : undefined[]
+>[] : Type[]
 
                 if (!usePull) {
 >!usePull : boolean
@@ -4796,11 +4796,11 @@ module Harness {
 >"\n" : "\n"
 
                 this.errors = [];
->this.errors = [] : undefined[]
+>this.errors = [] : CompilerError[]
 >this.errors : CompilerError[]
 >this : this
 >errors : CompilerError[]
->[] : undefined[]
+>[] : CompilerError[]
 
                 for (var i = 0; i < errorLines.length; i++) {
 >i : number
@@ -5544,7 +5544,7 @@ module Harness {
             var scripts: TypeScript.Script[] = [];
 >scripts : TypeScript.Script[]
 >TypeScript : any
->[] : undefined[]
+>[] : TypeScript.Script[]
 
             reset();
 >reset() : void
@@ -5892,7 +5892,7 @@ module Harness {
             // List of all the subfiles we've parsed out
             var files: TestUnitData[] = [];
 >files : TestUnitData[]
->[] : undefined[]
+>[] : TestUnitData[]
 
             var lines = splitContentByNewlines(code);
 >lines : string[]
@@ -5916,7 +5916,7 @@ module Harness {
             var refs: TypeScript.IFileReference[] = [];
 >refs : TypeScript.IFileReference[]
 >TypeScript : any
->[] : undefined[]
+>[] : TypeScript.IFileReference[]
 
             for (var i = 0; i < lines.length; i++) {
 >i : number
@@ -6129,9 +6129,9 @@ module Harness {
 >2 : 2
 
                         refs = [];
->refs = [] : undefined[]
+>refs = [] : TypeScript.IFileReference[]
 >refs : TypeScript.IFileReference[]
->[] : undefined[]
+>[] : TypeScript.IFileReference[]
 
                     } else {
                         // First metadata marker in the file
@@ -6241,7 +6241,7 @@ module Harness {
 >length : number
 >editRange : TypeScript.ScriptEditRange
 >TypeScript : any
->[] : undefined[]
+>[] : { length: number; editRange: TypeScript.ScriptEditRange; }[]
 
         constructor(public name: string, public content: string, public isResident: boolean, public maxScriptVersions: number) {
 >name : string
@@ -6263,11 +6263,11 @@ module Harness {
 >isResident : boolean
 
             this.editRanges = [];
->this.editRanges = [] : undefined[]
+>this.editRanges = [] : { length: number; editRange: TypeScript.ScriptEditRange; }[]
 >this.editRanges : { length: number; editRange: TypeScript.ScriptEditRange; }[]
 >this : this
 >editRanges : { length: number; editRange: TypeScript.ScriptEditRange; }[]
->[] : undefined[]
+>[] : { length: number; editRange: TypeScript.ScriptEditRange; }[]
 
             this.content = content;
 >this.content = content : string
@@ -6580,7 +6580,7 @@ module Harness {
 
         public scripts: ScriptInfo[] = [];
 >scripts : ScriptInfo[]
->[] : undefined[]
+>[] : ScriptInfo[]
 
         public maxScriptVersions = 100;
 >maxScriptVersions : number
@@ -7339,7 +7339,7 @@ module Harness {
             var result: Services.TextEdit[] = [];
 >result : Services.TextEdit[]
 >Services : any
->[] : undefined[]
+>[] : Services.TextEdit[]
 
             function mapEdits(edits: Services.TextEdit[]): { edit: Services.TextEdit; index: number; }[] {
 >mapEdits : (edits: Services.TextEdit[]) => {    edit: Services.TextEdit;    index: number;}[]
diff --git a/tests/baselines/reference/partialDiscriminatedUnionMemberHasGoodError.types b/tests/baselines/reference/partialDiscriminatedUnionMemberHasGoodError.types
index 5b1277374e464..0f1342dfa2345 100644
--- a/tests/baselines/reference/partialDiscriminatedUnionMemberHasGoodError.types
+++ b/tests/baselines/reference/partialDiscriminatedUnionMemberHasGoodError.types
@@ -25,7 +25,7 @@ interface Wrapper {
 
 const foo: Wrapper[] = [];
 >foo : Wrapper[]
->[] : undefined[]
+>[] : Wrapper[]
 
 foo.push({
 >foo.push({    types: [{        type: "A"    }]}) : number
diff --git a/tests/baselines/reference/propertyAccessChain.3.types b/tests/baselines/reference/propertyAccessChain.3.types
index ef31d61de9070..a9b73e8cfba66 100644
--- a/tests/baselines/reference/propertyAccessChain.3.types
+++ b/tests/baselines/reference/propertyAccessChain.3.types
@@ -169,16 +169,16 @@ for (obj?.a.b of []);
 >1 : 1
 
 [...obj?.a] = [];
->[...obj?.a] = [] : never[]
+>[...obj?.a] = [] : any[]
 >[...obj?.a] : any[]
 >...obj?.a : any
 >obj?.a : any
 >obj : any
 >a : any
->[] : never[]
+>[] : any[]
 
 [...obj?.a.b] = [];
->[...obj?.a.b] = [] : never[]
+>[...obj?.a.b] = [] : any[]
 >[...obj?.a.b] : any[]
 >...obj?.a.b : any
 >obj?.a.b : any
@@ -186,5 +186,5 @@ for (obj?.a.b of []);
 >obj : any
 >a : any
 >b : any
->[] : never[]
+>[] : any[]
 
diff --git a/tests/baselines/reference/propertyAssignmentUseParentType3.types b/tests/baselines/reference/propertyAssignmentUseParentType3.types
index 8bd4476324014..183760473c79a 100644
--- a/tests/baselines/reference/propertyAssignmentUseParentType3.types
+++ b/tests/baselines/reference/propertyAssignmentUseParentType3.types
@@ -18,7 +18,7 @@ function foo2(): any[] {
 >foo2 : typeof foo2
 
     return [];
->[] : undefined[]
+>[] : any[]
 }
 foo2.join = "";
 >foo2.join = "" : ""
diff --git a/tests/baselines/reference/reactTagNameComponentWithPropsNoOOM.types b/tests/baselines/reference/reactTagNameComponentWithPropsNoOOM.types
index badbee67f736e..518044ef86cbf 100644
--- a/tests/baselines/reference/reactTagNameComponentWithPropsNoOOM.types
+++ b/tests/baselines/reference/reactTagNameComponentWithPropsNoOOM.types
@@ -18,7 +18,7 @@ const rest: {} = {};
 
 const children: any[] = [];
 >children : any[]
->[] : never[]
+>[] : any[]
 
 <Tag className={classes} {...rest}>
 ><Tag className={classes} {...rest}>{children}</Tag> : JSX.Element
diff --git a/tests/baselines/reference/reactTagNameComponentWithPropsNoOOM2.types b/tests/baselines/reference/reactTagNameComponentWithPropsNoOOM2.types
index 5d82838481b82..18ab56ca9f4c9 100644
--- a/tests/baselines/reference/reactTagNameComponentWithPropsNoOOM2.types
+++ b/tests/baselines/reference/reactTagNameComponentWithPropsNoOOM2.types
@@ -19,7 +19,7 @@ const rest: React.HTMLAttributes<HTMLElement> = {};
 
 const children: any[] = [];
 >children : any[]
->[] : never[]
+>[] : any[]
 
 <Tag className={classes} {...rest}>
 ><Tag className={classes} {...rest}>{children}</Tag> : JSX.Element
diff --git a/tests/baselines/reference/readonlyArraysAndTuples2.types b/tests/baselines/reference/readonlyArraysAndTuples2.types
index 21872ad63d221..0f42a2b6423d2 100644
--- a/tests/baselines/reference/readonlyArraysAndTuples2.types
+++ b/tests/baselines/reference/readonlyArraysAndTuples2.types
@@ -35,7 +35,7 @@ class A {
 
   j: readonly string[] = [];
 >j : readonly string[]
->[] : never[]
+>[] : string[]
 
   @someDec
 >someDec : any
diff --git a/tests/baselines/reference/recursiveClassBaseType.types b/tests/baselines/reference/recursiveClassBaseType.types
index 46ca8433eddb5..91a890ae08e21 100644
--- a/tests/baselines/reference/recursiveClassBaseType.types
+++ b/tests/baselines/reference/recursiveClassBaseType.types
@@ -18,7 +18,7 @@ class C extends Base({ x: p<C[]>(() => []) }) { }
 >p<C[]>(() => []) : C[]
 >p : <T>(fn: () => T) => T
 >() => [] : () => never[]
->[] : never[]
+>[] : C[]
 
 // Repro from #44359
 
diff --git a/tests/baselines/reference/recursiveExcessPropertyChecks.types b/tests/baselines/reference/recursiveExcessPropertyChecks.types
index 04b78367460b5..1b9c180a889df 100644
--- a/tests/baselines/reference/recursiveExcessPropertyChecks.types
+++ b/tests/baselines/reference/recursiveExcessPropertyChecks.types
@@ -18,7 +18,7 @@ function getMaxId(items: NodeWithId[]) {
 const nodes = [] as ITreeItem[];
 >nodes : ITreeItem[]
 >[] as ITreeItem[] : ITreeItem[]
->[] : never[]
+>[] : ITreeItem[]
 
 getMaxId(nodes);
 >getMaxId(nodes) : void
diff --git a/tests/baselines/reference/recursiveTypeReferences1.types b/tests/baselines/reference/recursiveTypeReferences1.types
index 8259f392c5ba8..98e1dfd6d058d 100644
--- a/tests/baselines/reference/recursiveTypeReferences1.types
+++ b/tests/baselines/reference/recursiveTypeReferences1.types
@@ -409,7 +409,7 @@ function parse(node: Tree, index: number[] = []): HTMLUListElement {
 >parse : (node: Tree, index?: number[]) => HTMLUListElement
 >node : Tree
 >index : number[]
->[] : never[]
+>[] : number[]
 
   return html('ul', node.map(([el, children], i) => {
 >html('ul', node.map(([el, children], i) => {    const idx = [...index, i + 1];    return html('li', [      html('a', { href: `#${el.id}`, rel: 'noopener', 'data-index': idx.join('.') }, el.textContent!),      children.length > 0 ? parse(children, idx) : frag()    ]);  })) : any
@@ -544,8 +544,8 @@ function cons(hs: HTMLHeadingElement[]): Tree {
 >h : HTMLHeadingElement
 
     }, [[]])
->[[]] : never[][]
->[] : never[]
+>[[]] : HTMLHeadingElement[][]
+>[] : HTMLHeadingElement[]
 
     .reduce<Tree>((node, hs) =>
 >reduce : { (callbackfn: (previousValue: HTMLHeadingElement[], currentValue: HTMLHeadingElement[], currentIndex: number, array: HTMLHeadingElement[][]) => HTMLHeadingElement[]): HTMLHeadingElement[]; (callbackfn: (previousValue: HTMLHeadingElement[], currentValue: HTMLHeadingElement[], currentIndex: number, array: HTMLHeadingElement[][]) => HTMLHeadingElement[], initialValue: HTMLHeadingElement[]): HTMLHeadingElement[]; <U>(callbackfn: (previousValue: U, currentValue: HTMLHeadingElement[], currentIndex: number, array: HTMLHeadingElement[][]) => U, initialValue: U): U; }
@@ -580,7 +580,7 @@ function cons(hs: HTMLHeadingElement[]): Tree {
 >hs : HTMLHeadingElement[]
 
     , []);
->[] : never[]
+>[] : [HTMLHeadingElement, Tree][]
 }
 
 function level(h: HTMLHeadingElement): number {
diff --git a/tests/baselines/reference/restElementWithNullInitializer.types b/tests/baselines/reference/restElementWithNullInitializer.types
index c6eebb23d4988..85464cd6f8189 100644
--- a/tests/baselines/reference/restElementWithNullInitializer.types
+++ b/tests/baselines/reference/restElementWithNullInitializer.types
@@ -20,6 +20,6 @@ function foo3([...r] = {}) {
 function foo4([...r] = []) {
 >foo4 : ([...r]?: any[]) => void
 >r : any[]
->[] : undefined[]
+>[] : any[]
 }
 
diff --git a/tests/baselines/reference/sourceMapSample.types b/tests/baselines/reference/sourceMapSample.types
index 90ed347b5f63f..9fb34f5d82128 100644
--- a/tests/baselines/reference/sourceMapSample.types
+++ b/tests/baselines/reference/sourceMapSample.types
@@ -60,7 +60,7 @@ module Foo.Bar {
 
         var greeters: Greeter[] = [];
 >greeters : Greeter[]
->[] : undefined[]
+>[] : Greeter[]
 
         greeters[0] = new Greeter(greeting);
 >greeters[0] = new Greeter(greeting) : Greeter
diff --git a/tests/baselines/reference/sourceMapValidationClasses.types b/tests/baselines/reference/sourceMapValidationClasses.types
index fedebdcfa3322..e41e9e9d35d58 100644
--- a/tests/baselines/reference/sourceMapValidationClasses.types
+++ b/tests/baselines/reference/sourceMapValidationClasses.types
@@ -58,7 +58,7 @@ module Foo.Bar {
 
         var greeters: Greeter[] = []; /* inline block comment */
 >greeters : Greeter[]
->[] : undefined[]
+>[] : Greeter[]
 
         greeters[0] = new Greeter(greeting);
 >greeters[0] = new Greeter(greeting) : Greeter
diff --git a/tests/baselines/reference/sourceMapValidationDestructuringVariableStatementArrayBindingPatternDefaultValues3.types b/tests/baselines/reference/sourceMapValidationDestructuringVariableStatementArrayBindingPatternDefaultValues3.types
index eaa8c33d7c0b3..f10390578546f 100644
--- a/tests/baselines/reference/sourceMapValidationDestructuringVariableStatementArrayBindingPatternDefaultValues3.types
+++ b/tests/baselines/reference/sourceMapValidationDestructuringVariableStatementArrayBindingPatternDefaultValues3.types
@@ -93,30 +93,30 @@ let multiRobotAInfo: (string | string[])[];
 
 [, multiSkillB = []] = multiRobotB;
 >[, multiSkillB = []] = multiRobotB : MultiSkilledRobot
->[, multiSkillB = []] : [undefined, undefined[]]
+>[, multiSkillB = []] : [undefined, string[]]
 > : undefined
->multiSkillB = [] : undefined[]
+>multiSkillB = [] : string[]
 >multiSkillB : string[]
->[] : undefined[]
+>[] : string[]
 >multiRobotB : MultiSkilledRobot
 
 [, multiSkillB = []] = getMultiRobotB();
 >[, multiSkillB = []] = getMultiRobotB() : MultiSkilledRobot
->[, multiSkillB = []] : [undefined, undefined[]]
+>[, multiSkillB = []] : [undefined, string[]]
 > : undefined
->multiSkillB = [] : undefined[]
+>multiSkillB = [] : string[]
 >multiSkillB : string[]
->[] : undefined[]
+>[] : string[]
 >getMultiRobotB() : MultiSkilledRobot
 >getMultiRobotB : () => MultiSkilledRobot
 
 [, multiSkillB = []] = ["roomba", ["vacuum", "mopping"]];
 >[, multiSkillB = []] = ["roomba", ["vacuum", "mopping"]] : [string, string[]]
->[, multiSkillB = []] : [undefined, undefined[]]
+>[, multiSkillB = []] : [undefined, string[]]
 > : undefined
->multiSkillB = [] : undefined[]
+>multiSkillB = [] : string[]
 >multiSkillB : string[]
->[] : undefined[]
+>[] : string[]
 >["roomba", ["vacuum", "mopping"]] : [string, string[]]
 >"roomba" : "roomba"
 >["vacuum", "mopping"] : string[]
diff --git a/tests/baselines/reference/staticFieldWithInterfaceContext.types b/tests/baselines/reference/staticFieldWithInterfaceContext.types
index 0b109f955c1a1..595b01a7320d3 100644
--- a/tests/baselines/reference/staticFieldWithInterfaceContext.types
+++ b/tests/baselines/reference/staticFieldWithInterfaceContext.types
@@ -130,7 +130,7 @@ let [ c9 = class { static x = { a: "a" } } ]: I[] = [];
 >{ a: "a" } : { a: "a"; }
 >a : "a"
 >"a" : "a"
->[] : undefined[]
+>[] : I[]
 
 let [ c10 = class { static x = { a: "a" } } ]: [I?] = [class { static x = { a: "a" } }];
 >c10 : I
diff --git a/tests/baselines/reference/strictFunctionTypes1.types b/tests/baselines/reference/strictFunctionTypes1.types
index ac5deab52f3e7..fb40a3b375aaf 100644
--- a/tests/baselines/reference/strictFunctionTypes1.types
+++ b/tests/baselines/reference/strictFunctionTypes1.types
@@ -181,6 +181,6 @@ const t6: A[] = coAndContraArray([], acceptA);
 >t6 : A[]
 >coAndContraArray([], acceptA) : A[]
 >coAndContraArray : <T>(value: T[], func: (t: T) => void) => T[]
->[] : never[]
+>[] : A[]
 >acceptA : (x: A) => void
 
diff --git a/tests/baselines/reference/taggedTemplateStringsTypeArgumentInference.types b/tests/baselines/reference/taggedTemplateStringsTypeArgumentInference.types
index 114b37d1cf2e2..f36c73b74658e 100644
--- a/tests/baselines/reference/taggedTemplateStringsTypeArgumentInference.types
+++ b/tests/baselines/reference/taggedTemplateStringsTypeArgumentInference.types
@@ -392,7 +392,7 @@ var arr = someGenerics9 `${ [] }${ null }${ undefined }`;
 >someGenerics9 `${ [] }${ null }${ undefined }` : any[]
 >someGenerics9 : <T>(strs: TemplateStringsArray, a: T, b: T, c: T) => T
 >`${ [] }${ null }${ undefined }` : string
->[] : undefined[]
+>[] : any[]
 >null : null
 >undefined : undefined
 
diff --git a/tests/baselines/reference/taggedTemplateStringsTypeArgumentInferenceES6.types b/tests/baselines/reference/taggedTemplateStringsTypeArgumentInferenceES6.types
index 1953bde609932..3ee53a7205116 100644
--- a/tests/baselines/reference/taggedTemplateStringsTypeArgumentInferenceES6.types
+++ b/tests/baselines/reference/taggedTemplateStringsTypeArgumentInferenceES6.types
@@ -392,7 +392,7 @@ var arr = someGenerics9 `${ [] }${ null }${ undefined }`;
 >someGenerics9 `${ [] }${ null }${ undefined }` : any[]
 >someGenerics9 : <T>(strs: TemplateStringsArray, a: T, b: T, c: T) => T
 >`${ [] }${ null }${ undefined }` : string
->[] : undefined[]
+>[] : any[]
 >null : null
 >undefined : undefined
 
diff --git a/tests/baselines/reference/taggedTemplateStringsWithOverloadResolution2.types b/tests/baselines/reference/taggedTemplateStringsWithOverloadResolution2.types
index d9bac7879d94d..0f0bf8eb63900 100644
--- a/tests/baselines/reference/taggedTemplateStringsWithOverloadResolution2.types
+++ b/tests/baselines/reference/taggedTemplateStringsWithOverloadResolution2.types
@@ -28,7 +28,7 @@ var b = foo1([], 1);
 >b : number
 >foo1([], 1) : number
 >foo1 : { (strs: TemplateStringsArray, x: number): string; (strs: string[], x: number): number; }
->[] : undefined[]
+>[] : string[]
 >1 : 1
 
 function foo2(strs: string[], x: number): number;
@@ -60,6 +60,6 @@ var d = foo2([], 1);
 >d : number
 >foo2([], 1) : number
 >foo2 : { (strs: string[], x: number): number; (strs: TemplateStringsArray, x: number): string; }
->[] : undefined[]
+>[] : string[]
 >1 : 1
 
diff --git a/tests/baselines/reference/taggedTemplateStringsWithOverloadResolution2_ES6.types b/tests/baselines/reference/taggedTemplateStringsWithOverloadResolution2_ES6.types
index 68180a23d8f5f..f23faf9373abe 100644
--- a/tests/baselines/reference/taggedTemplateStringsWithOverloadResolution2_ES6.types
+++ b/tests/baselines/reference/taggedTemplateStringsWithOverloadResolution2_ES6.types
@@ -28,7 +28,7 @@ var b = foo1([], 1);
 >b : number
 >foo1([], 1) : number
 >foo1 : { (strs: TemplateStringsArray, x: number): string; (strs: string[], x: number): number; }
->[] : undefined[]
+>[] : string[]
 >1 : 1
 
 function foo2(strs: string[], x: number): number;
@@ -60,6 +60,6 @@ var d = foo2([], 1);
 >d : number
 >foo2([], 1) : number
 >foo2 : { (strs: string[], x: number): number; (strs: TemplateStringsArray, x: number): string; }
->[] : undefined[]
+>[] : string[]
 >1 : 1
 
diff --git a/tests/baselines/reference/trailingCommasInBindingPatterns.types b/tests/baselines/reference/trailingCommasInBindingPatterns.types
index 04754797495cd..f62e51eea9efc 100644
--- a/tests/baselines/reference/trailingCommasInBindingPatterns.types
+++ b/tests/baselines/reference/trailingCommasInBindingPatterns.types
@@ -1,7 +1,7 @@
 === tests/cases/conformance/es7/trailingCommasInBindingPatterns.ts ===
 const [...a,] = [];
 >a : any[]
->[] : undefined[]
+>[] : any[]
 
 const {...b,} = {};
 >b : {}
@@ -12,12 +12,12 @@ let c, d;
 >d : any
 
 ([...c,] = []);
->([...c,] = []) : undefined[]
->[...c,] = [] : undefined[]
+>([...c,] = []) : any[]
+>[...c,] = [] : any[]
 >[...c,] : any[]
 >...c : any
 >c : any
->[] : undefined[]
+>[] : any[]
 
 ({...d,} = {});
 >({...d,} = {}) : {}
diff --git a/tests/baselines/reference/tupleTypeInference2.types b/tests/baselines/reference/tupleTypeInference2.types
index 9983ba993efbe..946ec95b2b705 100644
--- a/tests/baselines/reference/tupleTypeInference2.types
+++ b/tests/baselines/reference/tupleTypeInference2.types
@@ -37,8 +37,8 @@ g([[]] as [void[]]); // U: {}
 >g([[]] as [void[]]) : unknown
 >g : <T, U>(f: B<T, U>) => U
 >[[]] as [void[]] : [void[]]
->[[]] : [never[]]
->[] : never[]
+>[[]] : [void[]]
+>[] : void[]
 
 type C<R, S> = [R[]] | [R[], S];
 >C : C<R, S>
@@ -51,8 +51,8 @@ h([[]] as [void[]]); // U: {}
 >h([[]] as [void[]]) : unknown
 >h : <T, U>(f: C<T, U>) => U
 >[[]] as [void[]] : [void[]]
->[[]] : [never[]]
->[] : never[]
+>[[]] : [void[]]
+>[] : void[]
 
 // Repro from #22562
 
@@ -74,6 +74,6 @@ h2([[]] as [void[]]); // T: void
 >h2([[]] as [void[]]) : void
 >h2 : <T>(f: C2<T>) => T
 >[[]] as [void[]] : [void[]]
->[[]] : [never[]]
->[] : never[]
+>[[]] : [void[]]
+>[] : void[]
 
diff --git a/tests/baselines/reference/typeArgumentInference.types b/tests/baselines/reference/typeArgumentInference.types
index 12fa09f616e21..f6c481d06209a 100644
--- a/tests/baselines/reference/typeArgumentInference.types
+++ b/tests/baselines/reference/typeArgumentInference.types
@@ -448,7 +448,7 @@ var arr = someGenerics9([], null, undefined);
 >arr : any[]
 >someGenerics9([], null, undefined) : any[]
 >someGenerics9 : <T>(a: T, b: T, c: T) => T
->[] : undefined[]
+>[] : any[]
 >null : null
 >undefined : undefined
 
diff --git a/tests/baselines/reference/typeArgumentInferenceConstructSignatures.types b/tests/baselines/reference/typeArgumentInferenceConstructSignatures.types
index 70ee543c1f772..fd52e7de298cc 100644
--- a/tests/baselines/reference/typeArgumentInferenceConstructSignatures.types
+++ b/tests/baselines/reference/typeArgumentInferenceConstructSignatures.types
@@ -513,7 +513,7 @@ var arr = new someGenerics9([], null, undefined);
 >arr : any[]
 >new someGenerics9([], null, undefined) : any[]
 >someGenerics9 : someGenerics9
->[] : undefined[]
+>[] : any[]
 >null : null
 >undefined : undefined
 
diff --git a/tests/baselines/reference/typeArgumentInferenceWithConstraints.types b/tests/baselines/reference/typeArgumentInferenceWithConstraints.types
index 332d463ad72d5..db81508f7de98 100644
--- a/tests/baselines/reference/typeArgumentInferenceWithConstraints.types
+++ b/tests/baselines/reference/typeArgumentInferenceWithConstraints.types
@@ -487,7 +487,7 @@ var arr = someGenerics9([], null, undefined);
 >arr : any[]
 >someGenerics9([], null, undefined) : any[]
 >someGenerics9 : <T extends unknown>(a: T, b: T, c: T) => T
->[] : undefined[]
+>[] : any[]
 >null : null
 >undefined : undefined
 
diff --git a/tests/baselines/reference/typeGuardsTypeParameters.types b/tests/baselines/reference/typeGuardsTypeParameters.types
index e6db4e578e866..5d72a94fc191a 100644
--- a/tests/baselines/reference/typeGuardsTypeParameters.types
+++ b/tests/baselines/reference/typeGuardsTypeParameters.types
@@ -65,7 +65,7 @@ function fun<T>(item: { [P in keyof T]: T[P] }) {
 
     const strings: string[] = [];
 >strings : string[]
->[] : never[]
+>[] : string[]
 
     for (const key in item) {
 >key : Extract<keyof T, string>
diff --git a/tests/baselines/reference/typeInferenceFBoundedTypeParams.types b/tests/baselines/reference/typeInferenceFBoundedTypeParams.types
index a6e9b45a01e38..0e2792d5ed4fe 100644
--- a/tests/baselines/reference/typeInferenceFBoundedTypeParams.types
+++ b/tests/baselines/reference/typeInferenceFBoundedTypeParams.types
@@ -53,7 +53,7 @@ fold(
 
     [] as [string, string][],
 >[] as [string, string][] : [string, string][]
->[] : undefined[]
+>[] : [string, string][]
 
     (result, value) => append(
 >(result, value) => append(        result,        ["", ""]    ) : (result: [string, string][], value: number) => [string, string][]
diff --git a/tests/baselines/reference/typeParameterAsTypeParameterConstraint.types b/tests/baselines/reference/typeParameterAsTypeParameterConstraint.types
index a68ae4f673b90..34acd1611eed5 100644
--- a/tests/baselines/reference/typeParameterAsTypeParameterConstraint.types
+++ b/tests/baselines/reference/typeParameterAsTypeParameterConstraint.types
@@ -91,7 +91,7 @@ foo2(1, []);
 >foo2(1, []) : any[]
 >foo2 : <T, U extends { length: T; }>(x: T, y: U) => U
 >1 : 1
->[] : undefined[]
+>[] : any[]
 
 foo2(1, ['']);
 >foo2(1, ['']) : string[]
diff --git a/tests/baselines/reference/typeParameterAsTypeParameterConstraint2.types b/tests/baselines/reference/typeParameterAsTypeParameterConstraint2.types
index 9dafa8925f0b1..2851049f4978a 100644
--- a/tests/baselines/reference/typeParameterAsTypeParameterConstraint2.types
+++ b/tests/baselines/reference/typeParameterAsTypeParameterConstraint2.types
@@ -60,7 +60,7 @@ foo2(1, { length: {} });
 foo2([], ['']);
 >foo2([], ['']) : { length: any[]; }
 >foo2 : <T, U extends { length: T; }>(x: T, y: U) => U
->[] : undefined[]
+>[] : any[]
 >[''] : string[]
 >'' : ""
 
diff --git a/tests/baselines/reference/typePredicateStructuralMatch.types b/tests/baselines/reference/typePredicateStructuralMatch.types
index 4d0b371b1071d..dea8a0ede8871 100644
--- a/tests/baselines/reference/typePredicateStructuralMatch.types
+++ b/tests/baselines/reference/typePredicateStructuralMatch.types
@@ -9,9 +9,9 @@ getResults1([]);
 getResults1({data: []});
 >getResults1({data: []}) : Results
 >getResults1 : (value: Results | { data: Results; }) => Results
->{data: []} : { data: undefined[]; }
->data : undefined[]
->[] : undefined[]
+>{data: []} : { data: Result[]; }
+>data : Result[]
+>[] : Result[]
 
 getResults2([]);
 >getResults2([]) : Results
@@ -21,9 +21,9 @@ getResults2([]);
 getResults2({data: []});
 >getResults2({data: []}) : Results
 >getResults2 : (value: Results | { data: Results; }) => Results
->{data: []} : { data: undefined[]; }
->data : undefined[]
->[] : undefined[]
+>{data: []} : { data: Result[]; }
+>data : Result[]
+>[] : Result[]
 
 type Result = { value: string };
 >Result : Result
diff --git a/tests/baselines/reference/undefinedInferentialTyping.types b/tests/baselines/reference/undefinedInferentialTyping.types
index be64a5ccca998..e9d533258c981 100644
--- a/tests/baselines/reference/undefinedInferentialTyping.types
+++ b/tests/baselines/reference/undefinedInferentialTyping.types
@@ -12,6 +12,6 @@ var a = f([], 3); // should be number
 >a : number
 >f([], 3) : 3
 >f : <T>(arr: T[], elemnt: T) => T
->[] : undefined[]
+>[] : 3[]
 >3 : 3
 
diff --git a/tests/baselines/reference/underscoreTest1.types b/tests/baselines/reference/underscoreTest1.types
index 27b7ed5cc19d3..8b2224eb43efc 100644
--- a/tests/baselines/reference/underscoreTest1.types
+++ b/tests/baselines/reference/underscoreTest1.types
@@ -128,7 +128,7 @@ var flat = _.reduceRight(list, (a, b) => a.concat(b), []);
 >a : number[]
 >concat : { (...items: ConcatArray<number>[]): number[]; (...items: (number | ConcatArray<number>)[]): number[]; }
 >b : number[]
->[] : undefined[]
+>[] : number[]
 
 var even = _.find([1, 2, 3, 4, 5, 6], (num) => num % 2 == 0);
 >even : number
diff --git a/tests/baselines/reference/unionOfClassCalls.types b/tests/baselines/reference/unionOfClassCalls.types
index 7edd1c7f02ac2..cfd942a3ebae8 100644
--- a/tests/baselines/reference/unionOfClassCalls.types
+++ b/tests/baselines/reference/unionOfClassCalls.types
@@ -42,11 +42,11 @@ const arr: number[] | string[] = [];  // Works with Array<number | string>
 
 const arr1: number[]  = [];
 >arr1 : number[]
->[] : never[]
+>[] : number[]
 
 const arr2:  string[] = [];
 >arr2 : string[]
->[] : never[]
+>[] : string[]
 
 arr.map((a: number | string, index: number) => { 
 >arr.map((a: number | string, index: number) => {     return index}) : number[]
@@ -122,7 +122,7 @@ arr1.reduce((acc: number[], a: number, index: number) => {
 >a : number
 
 }, [])
->[] : never[]
+>[] : number[]
 
 arr1.forEach((a: number, index: number) => { 
 >arr1.forEach((a: number, index: number) => {     return index}) : void
diff --git a/tests/baselines/reference/unspecializedConstraints.types b/tests/baselines/reference/unspecializedConstraints.types
index d46bf23287a3c..4d7208b71b708 100644
--- a/tests/baselines/reference/unspecializedConstraints.types
+++ b/tests/baselines/reference/unspecializedConstraints.types
@@ -156,7 +156,7 @@ module ts {
 >getProperties : () => Property[]
 
             return [];
->[] : undefined[]
+>[] : Property[]
         }
         getProperty(index: number): Property {
 >getProperty : (index: number) => Property
@@ -195,7 +195,7 @@ module ts {
 >getSignatures : () => Signature[]
 
             return [];
->[] : undefined[]
+>[] : Signature[]
         }
         isPrimitive(): boolean {
 >isPrimitive : () => boolean
diff --git a/tests/baselines/reference/validMultipleVariableDeclarations.types b/tests/baselines/reference/validMultipleVariableDeclarations.types
index 25bf8486b963d..82695168c27de 100644
--- a/tests/baselines/reference/validMultipleVariableDeclarations.types
+++ b/tests/baselines/reference/validMultipleVariableDeclarations.types
@@ -132,11 +132,11 @@ var a = ['a', 'b']
 var a = <string[]>[];
 >a : string[]
 ><string[]>[] : string[]
->[] : undefined[]
+>[] : string[]
 
 var a: string[] = [];
 >a : string[]
->[] : undefined[]
+>[] : string[]
 
 var a = new Array<string>();
 >a : string[]
diff --git a/tests/baselines/reference/variance.types b/tests/baselines/reference/variance.types
index 2f7267aca5de0..1c8178adf8dc2 100644
--- a/tests/baselines/reference/variance.types
+++ b/tests/baselines/reference/variance.types
@@ -37,7 +37,7 @@ class Bar<T extends string> {
 
   private static instance: Bar<string>[] = [];
 >instance : Bar<string>[]
->[] : never[]
+>[] : Bar<string>[]
 
   cast(_name: ([T] extends [string] ? string : string)) { }
 >cast : (_name: ([T] extends [string] ? string : string)) => void