diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 7b70751a4adf2..2bc27a5a59f43 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -21978,7 +21978,17 @@ namespace ts { const type = getTypeOfDottedName((node).expression, diagnostic); if (type) { const name = (node).name; - const prop = getPropertyOfType(type, isPrivateIdentifier(name) ? getSymbolNameForPrivateIdentifier(type.symbol, name.escapedText) : name.escapedText); + let prop: Symbol | undefined; + if (isPrivateIdentifier(name)) { + const isAnyLike = isTypeAny(type) || type === silentNeverType; + if (isAnyLike) { + return undefined; + } + prop = getPropertyOfType(type, getSymbolNameForPrivateIdentifier(type.symbol, name.escapedText)); + } + else { + prop = getPropertyOfType(type, name.escapedText); + } return prop && getExplicitTypeOfSymbol(prop, diagnostic); } return undefined; diff --git a/tests/baselines/reference/privateNameAndAny.errors.txt b/tests/baselines/reference/privateNameAndAny.errors.txt index 95130d6af41f5..79bded49a7b5c 100644 --- a/tests/baselines/reference/privateNameAndAny.errors.txt +++ b/tests/baselines/reference/privateNameAndAny.errors.txt @@ -9,6 +9,7 @@ tests/cases/conformance/classes/members/privateNames/privateNameAndAny.ts(5,15): thing.#bar; // Error ~~~~ !!! error TS2339: Property '#bar' does not exist on type 'any'. + thing.#foo(); } }; \ No newline at end of file diff --git a/tests/baselines/reference/privateNameAndAny.js b/tests/baselines/reference/privateNameAndAny.js index 83399f4aa4c8c..d8b23302157e3 100644 --- a/tests/baselines/reference/privateNameAndAny.js +++ b/tests/baselines/reference/privateNameAndAny.js @@ -4,6 +4,7 @@ class A { method(thing: any) { thing.#foo; // OK thing.#bar; // Error + thing.#foo(); } }; @@ -24,6 +25,8 @@ class A { method(thing) { __classPrivateFieldGet(thing, _foo); // OK thing.; // Error + __classPrivateFieldGet(thing, _foo).call(// Error + thing); } } _foo = new WeakMap(); diff --git a/tests/baselines/reference/privateNameAndAny.symbols b/tests/baselines/reference/privateNameAndAny.symbols index 070938340cbe1..b7845ada5dbbe 100644 --- a/tests/baselines/reference/privateNameAndAny.symbols +++ b/tests/baselines/reference/privateNameAndAny.symbols @@ -14,6 +14,9 @@ class A { thing.#bar; // Error >thing : Symbol(thing, Decl(privateNameAndAny.ts, 2, 11)) + + thing.#foo(); +>thing : Symbol(thing, Decl(privateNameAndAny.ts, 2, 11)) } }; diff --git a/tests/baselines/reference/privateNameAndAny.types b/tests/baselines/reference/privateNameAndAny.types index 89eed87858d61..0321735ce33b2 100644 --- a/tests/baselines/reference/privateNameAndAny.types +++ b/tests/baselines/reference/privateNameAndAny.types @@ -16,6 +16,11 @@ class A { thing.#bar; // Error >thing.#bar : any +>thing : any + + thing.#foo(); +>thing.#foo() : any +>thing.#foo : any >thing : any } }; diff --git a/tests/cases/conformance/classes/members/privateNames/privateNameAndAny.ts b/tests/cases/conformance/classes/members/privateNames/privateNameAndAny.ts index 099e734594684..0193a798c6567 100644 --- a/tests/cases/conformance/classes/members/privateNames/privateNameAndAny.ts +++ b/tests/cases/conformance/classes/members/privateNames/privateNameAndAny.ts @@ -6,5 +6,6 @@ class A { method(thing: any) { thing.#foo; // OK thing.#bar; // Error + thing.#foo(); } };