Skip to content

noNonNullAssertion (since v1.0.0)

Diagnostic Category: lint/style/noNonNullAssertion

Sources:

Disallow 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.

interface Example {
property?: string;
}
declare const example: Example;
const includesBaz = foo.property!.includes('baz');
style/noNonNullAssertion.js:5:21 lint/style/noNonNullAssertion  FIXABLE  ━━━━━━━━━━━━━━━━━━━━━━━━━━━

   Forbidden non-null assertion.
  
    3 │ }
    4 │ declare const example: 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 example: Example;
    5  - const·includesBaz·=·foo.property!.includes('baz');
      5+ const·includesBaz·=·foo.property?.includes('baz');
    6 6  
  
(b!! as number) = "test";
style/noNonNullAssertion.js:1:2 lint/style/noNonNullAssertion ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

   Forbidden non-null assertion.
  
  > 1 │ (b!! as number) = "test";
    ^^^
    2 │ 
  
interface Example {
property?: string;
}
declare const example: Example;
const includesBaz = foo.property?.includes('baz') ?? false;