diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 992fc466dd7..6a42dc43d51 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -7972,7 +7972,7 @@ namespace ts { return type; } const declaration = localOrExportSymbol.valueDeclaration; - const defaultsToDeclaredType = !strictNullChecks || !declaration || + const defaultsToDeclaredType = !strictNullChecks || type.flags & TypeFlags.Any || !declaration || declaration.kind === SyntaxKind.Parameter || isInAmbientContext(declaration) || getContainingFunctionOrModule(declaration) !== getContainingFunctionOrModule(node); if (defaultsToDeclaredType && !(type.flags & TypeFlags.Narrowable)) { diff --git a/tests/baselines/reference/defaultOfAnyInStrictNullChecks.js b/tests/baselines/reference/defaultOfAnyInStrictNullChecks.js new file mode 100644 index 00000000000..7706181b343 --- /dev/null +++ b/tests/baselines/reference/defaultOfAnyInStrictNullChecks.js @@ -0,0 +1,22 @@ +//// [defaultOfAnyInStrictNullChecks.ts] + +// Regression test for #8295 + +function foo() { + try { + } + catch (e) { + let s = e.message; + } +} + + +//// [defaultOfAnyInStrictNullChecks.js] +// Regression test for #8295 +function foo() { + try { + } + catch (e) { + var s = e.message; + } +} diff --git a/tests/baselines/reference/defaultOfAnyInStrictNullChecks.symbols b/tests/baselines/reference/defaultOfAnyInStrictNullChecks.symbols new file mode 100644 index 00000000000..c7de7f6b2f3 --- /dev/null +++ b/tests/baselines/reference/defaultOfAnyInStrictNullChecks.symbols @@ -0,0 +1,18 @@ +=== tests/cases/compiler/defaultOfAnyInStrictNullChecks.ts === + +// Regression test for #8295 + +function foo() { +>foo : Symbol(foo, Decl(defaultOfAnyInStrictNullChecks.ts, 0, 0)) + + try { + } + catch (e) { +>e : Symbol(e, Decl(defaultOfAnyInStrictNullChecks.ts, 6, 11)) + + let s = e.message; +>s : Symbol(s, Decl(defaultOfAnyInStrictNullChecks.ts, 7, 11)) +>e : Symbol(e, Decl(defaultOfAnyInStrictNullChecks.ts, 6, 11)) + } +} + diff --git a/tests/baselines/reference/defaultOfAnyInStrictNullChecks.types b/tests/baselines/reference/defaultOfAnyInStrictNullChecks.types new file mode 100644 index 00000000000..8e4c1adcd61 --- /dev/null +++ b/tests/baselines/reference/defaultOfAnyInStrictNullChecks.types @@ -0,0 +1,20 @@ +=== tests/cases/compiler/defaultOfAnyInStrictNullChecks.ts === + +// Regression test for #8295 + +function foo() { +>foo : () => void + + try { + } + catch (e) { +>e : any + + let s = e.message; +>s : any +>e.message : any +>e : any +>message : any + } +} + diff --git a/tests/cases/compiler/defaultOfAnyInStrictNullChecks.ts b/tests/cases/compiler/defaultOfAnyInStrictNullChecks.ts new file mode 100644 index 00000000000..17568f48029 --- /dev/null +++ b/tests/cases/compiler/defaultOfAnyInStrictNullChecks.ts @@ -0,0 +1,11 @@ +// @strictNullChecks: true + +// Regression test for #8295 + +function foo() { + try { + } + catch (e) { + let s = e.message; + } +}