noNonNullAssertedOptionalChain
Summary
Section titled “Summary”- Diagnostic Category:
lint/nursery/noNonNullAssertedOptionalChain
- This rule doesn’t have a fix.
- The default severity of this rule is error.
- Sources:
Description
Section titled “Description”Disallow non-null assertions after optional chaining expressions.
Optional chaining (?.
) is designed to return undefined
if the object is null
or undefined
.
Using a non-null assertion (!
) immediately after optional chaining defeats the purpose
of optional chaining and can lead to runtime errors.
Examples
Section titled “Examples”Invalid
Section titled “Invalid”obj?.prop!;
code-block.ts:1:1 lint/nursery/noNonNullAssertedOptionalChain ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✖ Forbidden non-null assertion after optional chaining.
> 1 │ obj?.prop!;
│ ^^^^^^^^^^
2 │
ℹ Optional chaining already handles nullish values. Using non-null assertion defeats its purpose and may cause runtime errors.
ℹ Consider using the nullish coalescing operator ??
or optional chaining throughout the chain instead.
obj?.method()!.prop;
code-block.ts:1:1 lint/nursery/noNonNullAssertedOptionalChain ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✖ Forbidden non-null assertion after optional chaining.
> 1 │ obj?.method()!.prop;
│ ^^^^^^^^^^^^^^
2 │
ℹ Optional chaining already handles nullish values. Using non-null assertion defeats its purpose and may cause runtime errors.
ℹ Consider using the nullish coalescing operator ??
or optional chaining throughout the chain instead.
obj?.[key]!.method();
code-block.ts:1:1 lint/nursery/noNonNullAssertedOptionalChain ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✖ Forbidden non-null assertion after optional chaining.
> 1 │ obj?.[key]!.method();
│ ^^^^^^^^^^^
2 │
ℹ Optional chaining already handles nullish values. Using non-null assertion defeats its purpose and may cause runtime errors.
ℹ Consider using the nullish coalescing operator ??
or optional chaining throughout the chain instead.
obj?.prop;
obj!.prop?.method();
obj?.prop ?? defaultValue;
How to configure
Section titled “How to configure”{ "linter": { "rules": { "nursery": { "noNonNullAssertedOptionalChain": "error" } } }}