diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index fbe192c5629..347d8c911f3 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -4151,13 +4151,13 @@ namespace ts { if (parentType === unknownType) { return unknownType; } - // If no type was specified or inferred for parent, or if the specified or inferred type is any, - // infer from the initializer of the binding element if one is present. Otherwise, go with the - // undefined or any type of the parent. - if (!parentType || isTypeAny(parentType)) { - if (declaration.initializer) { - return checkDeclarationInitializer(declaration); - } + // If no type was specified or inferred for parent, + // infer from the initializer of the binding element if one is present. + // Otherwise, go with the undefined type of the parent. + if (!parentType) { + return declaration.initializer ? checkDeclarationInitializer(declaration) : parentType; + } + if (isTypeAny(parentType)) { return parentType; } @@ -4183,9 +4183,6 @@ namespace ts { // computed properties with non-literal names are treated as 'any' return anyType; } - if (declaration.initializer) { - getContextualType(declaration.initializer); - } // Use type of the specified property, or otherwise, for a numeric name, the type of the numeric index signature, // or otherwise the type of the string index signature. diff --git a/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES5.types b/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES5.types index e2a6174e61f..d0d8561b808 100644 --- a/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES5.types +++ b/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES5.types @@ -28,9 +28,9 @@ var [a0, a1]: any = undefined; >undefined : undefined var [a2 = false, a3 = 1]: any = undefined; ->a2 : boolean +>a2 : any >false : false ->a3 : number +>a3 : any >1 : 1 >undefined : undefined diff --git a/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES5iterable.types b/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES5iterable.types index a650bbad2d2..09dc481c477 100644 --- a/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES5iterable.types +++ b/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES5iterable.types @@ -28,9 +28,9 @@ var [a0, a1]: any = undefined; >undefined : undefined var [a2 = false, a3 = 1]: any = undefined; ->a2 : boolean +>a2 : any >false : false ->a3 : number +>a3 : any >1 : 1 >undefined : undefined diff --git a/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES6.types b/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES6.types index b6f54b55799..a07ea6ca017 100644 --- a/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES6.types +++ b/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES6.types @@ -28,9 +28,9 @@ var [a0, a1]: any = undefined; >undefined : undefined var [a2 = false, a3 = 1]: any = undefined; ->a2 : boolean +>a2 : any >false : false ->a3 : number +>a3 : any >1 : 1 >undefined : undefined diff --git a/tests/baselines/reference/destructuringObjectBindingPatternAndAssignment1ES5.types b/tests/baselines/reference/destructuringObjectBindingPatternAndAssignment1ES5.types index e0aedcbb167..203815fa9c8 100644 --- a/tests/baselines/reference/destructuringObjectBindingPatternAndAssignment1ES5.types +++ b/tests/baselines/reference/destructuringObjectBindingPatternAndAssignment1ES5.types @@ -39,7 +39,7 @@ var {1: b3} = { 1: "string" }; >"string" : "string" var {b4 = 1}: any = { b4: 100000 }; ->b4 : number +>b4 : any >1 : 1 >{ b4: 100000 } : { b4: number; } >b4 : number diff --git a/tests/baselines/reference/destructuringObjectBindingPatternAndAssignment1ES6.types b/tests/baselines/reference/destructuringObjectBindingPatternAndAssignment1ES6.types index 7d68d32ac51..1c3d1f4d00c 100644 --- a/tests/baselines/reference/destructuringObjectBindingPatternAndAssignment1ES6.types +++ b/tests/baselines/reference/destructuringObjectBindingPatternAndAssignment1ES6.types @@ -39,7 +39,7 @@ var {1: b3} = { 1: "string" }; >"string" : "string" var {b4 = 1}: any = { b4: 100000 }; ->b4 : number +>b4 : any >1 : 1 >{ b4: 100000 } : { b4: number; } >b4 : number diff --git a/tests/baselines/reference/destructuringObjectBindingPatternAndAssignment4.types b/tests/baselines/reference/destructuringObjectBindingPatternAndAssignment4.types index 24f7e8ed0ba..104c694fbbd 100644 --- a/tests/baselines/reference/destructuringObjectBindingPatternAndAssignment4.types +++ b/tests/baselines/reference/destructuringObjectBindingPatternAndAssignment4.types @@ -1,20 +1,20 @@ === tests/cases/conformance/es6/destructuring/destructuringObjectBindingPatternAndAssignment4.ts === const { a = 1, ->a : 1 +>a : any >1 : 1 b = 2, ->b : 2 +>b : any >2 : 2 c = b, // ok ->c : 2 ->b : 2 +>c : any +>b : any d = a, // ok ->d : 1 ->a : 1 +>d : any +>a : any e = f, // error >e : any diff --git a/tests/baselines/reference/objectRestParameter.types b/tests/baselines/reference/objectRestParameter.types index 3d0d1bb619b..831ac9df59f 100644 --- a/tests/baselines/reference/objectRestParameter.types +++ b/tests/baselines/reference/objectRestParameter.types @@ -77,7 +77,7 @@ class C { } function foobar({ bar={}, ...opts }: any = {}) { >foobar : ({ bar, ...opts }?: any) => void ->bar : {} +>bar : any >{} : {} >opts : any >{} : {} diff --git a/tests/baselines/reference/objectRestParameterES5.types b/tests/baselines/reference/objectRestParameterES5.types index e0ebee39317..1b8dd29e29e 100644 --- a/tests/baselines/reference/objectRestParameterES5.types +++ b/tests/baselines/reference/objectRestParameterES5.types @@ -77,7 +77,7 @@ class C { } function foobar({ bar={}, ...opts }: any = {}) { >foobar : ({ bar, ...opts }?: any) => void ->bar : {} +>bar : any >{} : {} >opts : any >{} : {}