diff --git a/packages/eslint-plugin/lib/rules/no-unused-vars.js b/packages/eslint-plugin/lib/rules/no-unused-vars.js index bb09d6abd271..79c60d437c24 100644 --- a/packages/eslint-plugin/lib/rules/no-unused-vars.js +++ b/packages/eslint-plugin/lib/rules/no-unused-vars.js @@ -92,6 +92,12 @@ module.exports = Object.assign({}, baseRule, { }, '*[declare=true] Identifier'(node) { context.markVariableAsUsed(node.name); + const scope = context.getScope(); + const { variableScope } = scope; + if (variableScope !== scope) { + const superVar = variableScope.set.get(node.name); + if (superVar) superVar.eslintUsed = true; + } } }); } diff --git a/packages/eslint-plugin/tests/lib/rules/no-unused-vars.js b/packages/eslint-plugin/tests/lib/rules/no-unused-vars.js index c197adff8ee1..726f755c3956 100644 --- a/packages/eslint-plugin/tests/lib/rules/no-unused-vars.js +++ b/packages/eslint-plugin/tests/lib/rules/no-unused-vars.js @@ -540,6 +540,13 @@ declare namespace Foo { declare var Foo: { new (value?: any): Object, foo(): string +} + `, + // https://github.com/typescript-eslint/typescript-eslint/issues/106 + ` +declare class Foo { + constructor(value?: any): Object; + foo(): string; } `, `