diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts
index ba5a482a4a4..b4052825c68 100644
--- a/src/compiler/checker.ts
+++ b/src/compiler/checker.ts
@@ -30566,7 +30566,9 @@ namespace ts {
break;
}
const symbol = getSymbolOfNode(member);
- if (!symbol.isReferenced && (hasModifier(member, ModifierFlags.Private) || isNamedDeclaration(member) && isPrivateIdentifier(member.name))) {
+ if (!symbol.isReferenced
+ && (hasModifier(member, ModifierFlags.Private) || isNamedDeclaration(member) && isPrivateIdentifier(member.name))
+ && !(member.flags & NodeFlags.Ambient)) {
addDiagnostic(member, UnusedKind.Local, createDiagnosticForNode(member.name!, Diagnostics._0_is_declared_but_its_value_is_never_read, symbolToString(symbol)));
}
break;
diff --git a/tests/cases/fourslash/unusedVariableInClass4.ts b/tests/cases/fourslash/unusedVariableInClass4.ts
new file mode 100644
index 00000000000..ec5d5f973a2
--- /dev/null
+++ b/tests/cases/fourslash/unusedVariableInClass4.ts
@@ -0,0 +1,11 @@
+///
+
+// @noUnusedLocals: false
+////class greeter {
+//// [|private greeting: string;|]
+////}
+
+verify.codeFix({
+ description: "Remove unused declaration for: 'greeting'",
+ newRangeContent: "",
+});
diff --git a/tests/cases/fourslash/unusedVariableInClass5.ts b/tests/cases/fourslash/unusedVariableInClass5.ts
new file mode 100644
index 00000000000..c1e9f58f527
--- /dev/null
+++ b/tests/cases/fourslash/unusedVariableInClass5.ts
@@ -0,0 +1,10 @@
+///
+
+// @noUnusedLocals: true
+// @target: esnext
+////declare class greeter {
+//// #private;
+//// private name;
+////}
+
+verify.noErrors()