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()