src/content/docs/linter/rules/no-non-null-asserted-optional-chain.mdx
import { Tabs, TabItem } from '@astrojs/starlight/components';
<Tabs> <TabItem label="JavaScript (and super languages)" icon="seti:javascript"> ## Summary - Rule available since: `v2.1.4` - Diagnostic Category: [`lint/suspicious/noNonNullAssertedOptionalChain`](/reference/diagnostics#diagnostic-category) - This rule is **recommended**, meaning it is enabled by default. - This rule doesn't have a fix. - The default severity of this rule is [**error**](/reference/diagnostics#error). - Sources: - Same as [`@typescript-eslint/no-non-null-asserted-optional-chain`](https://typescript-eslint.io/rules/no-non-null-asserted-optional-chain){
"linter": {
"rules": {
"suspicious": {
"noNonNullAssertedOptionalChain": "error"
}
}
}
}
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!;
obj?.method()!.prop;
obj?.[key]!.method();
obj?.prop;
obj!.prop?.method();
obj?.prop ?? defaultValue;