diff --git a/src/rules/noUnnecessaryTypeAssertionRule.ts b/src/rules/noUnnecessaryTypeAssertionRule.ts index 6b5c89b673f..b6eabf610d0 100644 --- a/src/rules/noUnnecessaryTypeAssertionRule.ts +++ b/src/rules/noUnnecessaryTypeAssertionRule.ts @@ -45,7 +45,13 @@ export class Rule extends Lint.Rules.TypedRule { public applyWithProgram(sourceFile: ts.SourceFile, program: ts.Program): Lint.RuleFailure[] { return this.applyWithWalker( - new Walker(sourceFile, this.ruleName, this.ruleArguments, program.getTypeChecker()), + new Walker( + sourceFile, + this.ruleName, + this.ruleArguments, + program.getTypeChecker(), + !!program.getCompilerOptions().strictNullChecks, + ), ); } } @@ -56,6 +62,7 @@ class Walker extends Lint.AbstractWalker { ruleName: string, options: string[], private readonly checker: ts.TypeChecker, + private readonly strictNullChecks: boolean, ) { super(sourceFile, ruleName, options); } @@ -64,7 +71,9 @@ class Walker extends Lint.AbstractWalker { const cb = (node: ts.Node): void => { switch (node.kind) { case ts.SyntaxKind.NonNullExpression: - this.checkNonNullAssertion(node as ts.NonNullExpression); + if (this.strictNullChecks) { + this.checkNonNullAssertion(node as ts.NonNullExpression); + } break; case ts.SyntaxKind.TypeAssertionExpression: case ts.SyntaxKind.AsExpression: diff --git a/test/rules/no-unnecessary-type-assertion/noStrictNullChecks/test.ts.lint b/test/rules/no-unnecessary-type-assertion/noStrictNullChecks/test.ts.lint new file mode 100644 index 00000000000..baa6c0a6dfd --- /dev/null +++ b/test/rules/no-unnecessary-type-assertion/noStrictNullChecks/test.ts.lint @@ -0,0 +1,6 @@ +declare const x: string | undefined; +x!; + +declare const y: string; +y as string; +~~~~~~~~~~~ [This assertion is unnecessary since it does not change the type of the expression.] diff --git a/test/rules/no-unnecessary-type-assertion/noStrictNullChecks/tsconfig.json b/test/rules/no-unnecessary-type-assertion/noStrictNullChecks/tsconfig.json new file mode 100644 index 00000000000..0967ef424bc --- /dev/null +++ b/test/rules/no-unnecessary-type-assertion/noStrictNullChecks/tsconfig.json @@ -0,0 +1 @@ +{} diff --git a/test/rules/no-unnecessary-type-assertion/noStrictNullChecks/tslint.json b/test/rules/no-unnecessary-type-assertion/noStrictNullChecks/tslint.json new file mode 100644 index 00000000000..2acf91b7b08 --- /dev/null +++ b/test/rules/no-unnecessary-type-assertion/noStrictNullChecks/tslint.json @@ -0,0 +1,5 @@ +{ + "rules": { + "no-unnecessary-type-assertion": true + } +} diff --git a/test/rules/no-unnecessary-type-assertion/test.ts.fix b/test/rules/no-unnecessary-type-assertion/strictNullChecks/test.ts.fix similarity index 100% rename from test/rules/no-unnecessary-type-assertion/test.ts.fix rename to test/rules/no-unnecessary-type-assertion/strictNullChecks/test.ts.fix diff --git a/test/rules/no-unnecessary-type-assertion/test.ts.lint b/test/rules/no-unnecessary-type-assertion/strictNullChecks/test.ts.lint similarity index 100% rename from test/rules/no-unnecessary-type-assertion/test.ts.lint rename to test/rules/no-unnecessary-type-assertion/strictNullChecks/test.ts.lint diff --git a/test/rules/no-unnecessary-type-assertion/tsconfig.json b/test/rules/no-unnecessary-type-assertion/strictNullChecks/tsconfig.json similarity index 100% rename from test/rules/no-unnecessary-type-assertion/tsconfig.json rename to test/rules/no-unnecessary-type-assertion/strictNullChecks/tsconfig.json diff --git a/test/rules/no-unnecessary-type-assertion/tslint.json b/test/rules/no-unnecessary-type-assertion/strictNullChecks/tslint.json similarity index 100% rename from test/rules/no-unnecessary-type-assertion/tslint.json rename to test/rules/no-unnecessary-type-assertion/strictNullChecks/tslint.json