Skip to content

noNonNullAssertedOptionalChain

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.

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;
biome.json
{
"linter": {
"rules": {
"nursery": {
"noNonNullAssertedOptionalChain": "error"
}
}
}
}