diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 52cd728e7f733..6208ccb150887 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -28944,7 +28944,7 @@ namespace ts { } function isPrivateWithinAmbient(node: Node): boolean { - return hasModifier(node, ModifierFlags.Private) && !!(node.flags & NodeFlags.Ambient); + return (hasModifier(node, ModifierFlags.Private) || isPrivateIdentifierPropertyDeclaration(node)) && !!(node.flags & NodeFlags.Ambient); } function getEffectiveDeclarationFlags(n: Declaration, flagsToCheck: ModifierFlags): ModifierFlags { diff --git a/tests/baselines/reference/privateNameAmbientNoImplicitAny.errors.txt b/tests/baselines/reference/privateNameAmbientNoImplicitAny.errors.txt new file mode 100644 index 0000000000000..c7558fbd81899 --- /dev/null +++ b/tests/baselines/reference/privateNameAmbientNoImplicitAny.errors.txt @@ -0,0 +1,12 @@ +tests/cases/conformance/classes/members/privateNames/privateNameAmbientNoImplicitAny.ts(5,5): error TS7008: Member '#prop' implicitly has an 'any' type. + + +==== tests/cases/conformance/classes/members/privateNames/privateNameAmbientNoImplicitAny.ts (1 errors) ==== + declare class A { + #prop; + } + class B { + #prop; + ~~~~~ +!!! error TS7008: Member '#prop' implicitly has an 'any' type. + } \ No newline at end of file diff --git a/tests/baselines/reference/privateNameAmbientNoImplicitAny.js b/tests/baselines/reference/privateNameAmbientNoImplicitAny.js new file mode 100644 index 0000000000000..8d08826cdb49c --- /dev/null +++ b/tests/baselines/reference/privateNameAmbientNoImplicitAny.js @@ -0,0 +1,12 @@ +//// [privateNameAmbientNoImplicitAny.ts] +declare class A { + #prop; +} +class B { + #prop; +} + +//// [privateNameAmbientNoImplicitAny.js] +class B { + #prop; +} diff --git a/tests/baselines/reference/privateNameAmbientNoImplicitAny.symbols b/tests/baselines/reference/privateNameAmbientNoImplicitAny.symbols new file mode 100644 index 0000000000000..4aa4a67eff02c --- /dev/null +++ b/tests/baselines/reference/privateNameAmbientNoImplicitAny.symbols @@ -0,0 +1,13 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameAmbientNoImplicitAny.ts === +declare class A { +>A : Symbol(A, Decl(privateNameAmbientNoImplicitAny.ts, 0, 0)) + + #prop; +>#prop : Symbol(A.#prop, Decl(privateNameAmbientNoImplicitAny.ts, 0, 17)) +} +class B { +>B : Symbol(B, Decl(privateNameAmbientNoImplicitAny.ts, 2, 1)) + + #prop; +>#prop : Symbol(B.#prop, Decl(privateNameAmbientNoImplicitAny.ts, 3, 9)) +} diff --git a/tests/baselines/reference/privateNameAmbientNoImplicitAny.types b/tests/baselines/reference/privateNameAmbientNoImplicitAny.types new file mode 100644 index 0000000000000..5a1152579a264 --- /dev/null +++ b/tests/baselines/reference/privateNameAmbientNoImplicitAny.types @@ -0,0 +1,13 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameAmbientNoImplicitAny.ts === +declare class A { +>A : A + + #prop; +>#prop : any +} +class B { +>B : B + + #prop; +>#prop : any +} diff --git a/tests/cases/conformance/classes/members/privateNames/privateNameAmbientNoImplicitAny.ts b/tests/cases/conformance/classes/members/privateNames/privateNameAmbientNoImplicitAny.ts new file mode 100644 index 0000000000000..02a83e8b1491d --- /dev/null +++ b/tests/cases/conformance/classes/members/privateNames/privateNameAmbientNoImplicitAny.ts @@ -0,0 +1,8 @@ +// @noImplicitAny: true +// @target: ESNext +declare class A { + #prop; +} +class B { + #prop; +} \ No newline at end of file