Skip to content

Commit 9b518c8

Browse files
authored
Exempt ambient private properties from noImplicitAny (#36640)
1 parent c59fcae commit 9b518c8

File tree

6 files changed

+59
-1
lines changed

6 files changed

+59
-1
lines changed

src/compiler/checker.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29280,7 +29280,7 @@ namespace ts {
2928029280
}
2928129281

2928229282
function isPrivateWithinAmbient(node: Node): boolean {
29283-
return hasModifier(node, ModifierFlags.Private) && !!(node.flags & NodeFlags.Ambient);
29283+
return (hasModifier(node, ModifierFlags.Private) || isPrivateIdentifierPropertyDeclaration(node)) && !!(node.flags & NodeFlags.Ambient);
2928429284
}
2928529285

2928629286
function getEffectiveDeclarationFlags(n: Declaration, flagsToCheck: ModifierFlags): ModifierFlags {
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
tests/cases/conformance/classes/members/privateNames/privateNameAmbientNoImplicitAny.ts(5,5): error TS7008: Member '#prop' implicitly has an 'any' type.
2+
3+
4+
==== tests/cases/conformance/classes/members/privateNames/privateNameAmbientNoImplicitAny.ts (1 errors) ====
5+
declare class A {
6+
#prop;
7+
}
8+
class B {
9+
#prop;
10+
~~~~~
11+
!!! error TS7008: Member '#prop' implicitly has an 'any' type.
12+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
//// [privateNameAmbientNoImplicitAny.ts]
2+
declare class A {
3+
#prop;
4+
}
5+
class B {
6+
#prop;
7+
}
8+
9+
//// [privateNameAmbientNoImplicitAny.js]
10+
class B {
11+
#prop;
12+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
=== tests/cases/conformance/classes/members/privateNames/privateNameAmbientNoImplicitAny.ts ===
2+
declare class A {
3+
>A : Symbol(A, Decl(privateNameAmbientNoImplicitAny.ts, 0, 0))
4+
5+
#prop;
6+
>#prop : Symbol(A.#prop, Decl(privateNameAmbientNoImplicitAny.ts, 0, 17))
7+
}
8+
class B {
9+
>B : Symbol(B, Decl(privateNameAmbientNoImplicitAny.ts, 2, 1))
10+
11+
#prop;
12+
>#prop : Symbol(B.#prop, Decl(privateNameAmbientNoImplicitAny.ts, 3, 9))
13+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
=== tests/cases/conformance/classes/members/privateNames/privateNameAmbientNoImplicitAny.ts ===
2+
declare class A {
3+
>A : A
4+
5+
#prop;
6+
>#prop : any
7+
}
8+
class B {
9+
>B : B
10+
11+
#prop;
12+
>#prop : any
13+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
// @noImplicitAny: true
2+
// @target: ESNext
3+
declare class A {
4+
#prop;
5+
}
6+
class B {
7+
#prop;
8+
}

0 commit comments

Comments
 (0)