Back to Biomejs

noExplicitAny

src/content/docs/linter/rules/no-explicit-any.mdx

latest5.7 KB
Original Source

import { Tabs, TabItem } from '@astrojs/starlight/components';

<Tabs> <TabItem label="TypeScript and TSX" icon="seti:typescript"> ## Summary - Rule available since: `v1.0.0` - Diagnostic Category: [`lint/suspicious/noExplicitAny`](/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 [**warning**](/reference/diagnostics#warning). - Sources: - Same as [`@typescript-eslint/no-explicit-any`](https://typescript-eslint.io/rules/no-explicit-any)

How to configure

json
{
	"linter": {
		"rules": {
			"suspicious": {
				"noExplicitAny": "error"
			}
		}
	}
}

Description

Disallow the any type usage.

The any type in TypeScript is a dangerous "escape hatch" from the type system. Using any disables many type checking rules and is generally best used only as a last resort or when prototyping code.

TypeScript's --noImplicitAny compiler option prevents an implied any, but doesn't prevent any from being explicitly used the way this rule does.

Sometimes you can use the type unknown instead of the type any. It also accepts any value, however it requires to check that a property exists before calling it.

Examples

Invalid

ts
let variable: any = 1;
<pre class="language-text"><code class="language-text">code-block.ts:1:15 <a href="https://biomejs.dev/linter/rules/no-explicit-any">lint/suspicious/noExplicitAny</a> ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ <strong><span style="color: Orange;">⚠</span></strong> <span style="color: Orange;">Unexpected </span><span style="color: Orange;"><strong>any</strong></span><span style="color: Orange;">. Specify a different type.</span> <strong><span style="color: Tomato;">&gt;</span></strong> <strong>1 │ </strong>let variable: any = 1; <strong> │ </strong> <strong><span style="color: Tomato;">^</span></strong><strong><span style="color: Tomato;">^</span></strong><strong><span style="color: Tomato;">^</span></strong> <strong>2 │ </strong> <strong><span style="color: lightgreen;">ℹ</span></strong> <span style="color: lightgreen;"><strong>any</strong></span><span style="color: lightgreen;"> disables many type checking rules. Its use should be avoided.</span> </code></pre>
ts
class SomeClass {
   message: Array<Array<any>>;
}
<pre class="language-text"><code class="language-text">code-block.ts:2:25 <a href="https://biomejs.dev/linter/rules/no-explicit-any">lint/suspicious/noExplicitAny</a> ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ <strong><span style="color: Orange;">⚠</span></strong> <span style="color: Orange;">Unexpected </span><span style="color: Orange;"><strong>any</strong></span><span style="color: Orange;">. Specify a different type.</span> <strong>1 │ </strong>class SomeClass &#123; <strong><span style="color: Tomato;">&gt;</span></strong> <strong>2 │ </strong> message: Array&lt;Array&lt;any&gt;&gt;; <strong> │ </strong> <strong><span style="color: Tomato;">^</span></strong><strong><span style="color: Tomato;">^</span></strong><strong><span style="color: Tomato;">^</span></strong> <strong>3 │ </strong>&#125; <strong>4 │ </strong> <strong><span style="color: lightgreen;">ℹ</span></strong> <span style="color: lightgreen;"><strong>any</strong></span><span style="color: lightgreen;"> disables many type checking rules. Its use should be avoided.</span> </code></pre>
ts
function fn(param: Array<any>): void {}
<pre class="language-text"><code class="language-text">code-block.ts:1:26 <a href="https://biomejs.dev/linter/rules/no-explicit-any">lint/suspicious/noExplicitAny</a> ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ <strong><span style="color: Orange;">⚠</span></strong> <span style="color: Orange;">Unexpected </span><span style="color: Orange;"><strong>any</strong></span><span style="color: Orange;">. Specify a different type.</span> <strong><span style="color: Tomato;">&gt;</span></strong> <strong>1 │ </strong>function fn(param: Array&lt;any&gt;): void &#123;&#125; <strong> │ </strong> <strong><span style="color: Tomato;">^</span></strong><strong><span style="color: Tomato;">^</span></strong><strong><span style="color: Tomato;">^</span></strong> <strong>2 │ </strong> <strong><span style="color: lightgreen;">ℹ</span></strong> <span style="color: lightgreen;"><strong>any</strong></span><span style="color: lightgreen;"> disables many type checking rules. Its use should be avoided.</span> </code></pre>

Valid

ts
let variable: number = 1;
let variable2 = 1;
ts
class SomeClass<T extends any> {
   message: Array<Array<unknown>>;
}
ts
function fn(param: Array<Array<unknown>>): Array<unknown> {}
</TabItem> </Tabs>