noNonNullAssertion
Diagnostic Category: lint/style/noNonNullAssertion
Since: v1.0.0
Sources:
Description
Section titled DescriptionDisallow non-null assertions using the ! postfix operator.
TypeScript’s ! non-null assertion operator asserts to the type system that an expression is non-nullable, as
in not null or undefined. Using assertions to tell the type system new information is often a sign that
code is not fully type-safe. It’s generally better to structure program logic so that TypeScript understands
when values may be nullable.
Examples
Section titled ExamplesInvalid
Section titled Invalidinterface Example {  property?: string;}declare const foo: Example;const includesBaz = foo.property!.includes('baz');code-block.ts:5:21 lint/style/noNonNullAssertion  FIXABLE  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  ✖ Forbidden non-null assertion.
  
    3 │ }
    4 │ declare const foo: Example;
  > 5 │ const includesBaz = foo.property!.includes(‘baz’);
      │                     ^^^^^^^^^^^^^
    6 │ 
  
  ℹ Unsafe fix: Replace with optional chain operator ?. This operator includes runtime checks, so it is safer than the compile-only non-null assertion operator
  
    3 3 │   }
    4 4 │   declare const foo: Example;
    5   │ - const·includesBaz·=·foo.property!.includes(‘baz’);
      5 │ + const·includesBaz·=·foo.property?.includes(‘baz’);
    6 6 │   
  
(b!! as number) = "test";code-block.ts:1:2 lint/style/noNonNullAssertion ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  ✖ Forbidden non-null assertion.
  
  > 1 │ (b!! as number) = “test”;
      │  ^^^
    2 │ 
  
Valid
Section titled Validinterface Example {  property?: string;}
declare const foo: Example;const includesBaz = foo.property?.includes('baz') ?? false;How to configure
Section titled How to configure{  "linter": {    "rules": {      "style": {        "noNonNullAssertion": "error"      }    }  }}