From 75be9a1042919147178ebb9f9eec94922c2c26c5 Mon Sep 17 00:00:00 2001 From: Klaus Meinhardt Date: Tue, 28 Nov 2017 17:35:44 +0100 Subject: [PATCH] prefer-const: don't treat index signatures as parameters (#3385) The `k` in `{[k: string]: string}` is a `ts.ParameterDeclaration`. This should not be treated like a parameter in the value domain. --- src/rules/preferConstRule.ts | 10 ++++++---- test/rules/prefer-const/default/test.ts.fix | 7 +++++++ test/rules/prefer-const/default/test.ts.lint | 7 +++++++ 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/rules/preferConstRule.ts b/src/rules/preferConstRule.ts index e66f9cbf830..984f95dd782 100644 --- a/src/rules/preferConstRule.ts +++ b/src/rules/preferConstRule.ts @@ -175,10 +175,12 @@ class PreferConstWalker extends Lint.AbstractWalker { }); } } else if (node.kind === ts.SyntaxKind.Parameter) { - this.handleBindingName((node as ts.ParameterDeclaration).name, { - canBeConst: false, - isBlockScoped: true, - }); + if (node.parent!.kind !== ts.SyntaxKind.IndexSignature) { + this.handleBindingName((node as ts.ParameterDeclaration).name, { + canBeConst: false, + isBlockScoped: true, + }); + } } else if (utils.isPostfixUnaryExpression(node) || utils.isPrefixUnaryExpression(node) && (node.operator === ts.SyntaxKind.PlusPlusToken || node.operator === ts.SyntaxKind.MinusMinusToken)) { diff --git a/test/rules/prefer-const/default/test.ts.fix b/test/rules/prefer-const/default/test.ts.fix index e7f2b6d749d..987b880694e 100644 --- a/test/rules/prefer-const/default/test.ts.fix +++ b/test/rules/prefer-const/default/test.ts.fix @@ -219,3 +219,10 @@ for (let {var1, var2} of someArr) { var2 = null; } +{ + let k: any = 0; + function foo(param: {[k: string]: string}) { + k = param; + } +} + diff --git a/test/rules/prefer-const/default/test.ts.lint b/test/rules/prefer-const/default/test.ts.lint index acd8cee48eb..5b379fce273 100644 --- a/test/rules/prefer-const/default/test.ts.lint +++ b/test/rules/prefer-const/default/test.ts.lint @@ -258,6 +258,13 @@ for (let {var1, var2} of someArr) { var2 = null; } +{ + let k: any = 0; + function foo(param: {[k: string]: string}) { + k = param; + } +} + [_base]: Identifier '%%s' is never reassigned; use 'const' instead of '%s'. [let]: _base % ('let') [var]: _base % ('var')