Skip to content

Latest commit

Β 

History

History
168 lines (123 loc) Β· 2.9 KB

File metadata and controls

168 lines (123 loc) Β· 2.9 KB

no-instanceof-builtins

πŸ“ Disallow instanceof with built-in objects.

πŸ’Ό This rule is enabled in the following configs: βœ… recommended, β˜‘οΈ unopinionated.

πŸ”§πŸ’‘ This rule is automatically fixable by the --fix CLI option and manually fixable by editor suggestions.

Using instanceof to determine the type of an object has limitations.

Therefore, it is recommended to use a safer method, like Object.prototype.toString.call(foo) or the npm package @sindresorhus/is to determine the type of an object.

Examples

// ❌
foo instanceof String;

// βœ…
typeof foo === 'string';
// ❌
foo instanceof Number;

// βœ…
typeof foo === 'number';
// ❌
foo instanceof Boolean;

// βœ…
typeof foo === 'boolean';
// ❌
foo instanceof BigInt;

// βœ…
typeof foo === 'bigint';
// ❌
foo instanceof Symbol;

// βœ…
typeof foo === 'symbol';
// ❌
foo instanceof Array;

// βœ…
Array.isArray(foo);
// ❌
foo instanceof Function;

// βœ…
typeof foo === 'function';
// ❌
foo instanceof Object;

// βœ…
Object.prototype.toString.call(foo) === '[object Object]';
import is from '@sindresorhus/is';

// ❌
foo instanceof Map;

// βœ…
is(foo) === 'Map';

Options

strategy

Type: 'loose' | 'strict'
Default: 'loose'

The matching strategy:

  • 'loose' - Matches the primitive type (string, number, boolean, bigint, symbol) constructors, Function, and Array.
  • 'strict' - Matches all built-in constructors.
"unicorn/no-instanceof-builtins": [
	"error",
	{
		"strategy": "strict"
	}
]

include

Type: string[]
Default: []

Specify the constructors that should be validated.

"unicorn/no-instanceof-builtins": [
	"error",
	{
		"include": [
			"WebWorker",
			"HTMLElement"
		]
	}
]

exclude

Type: string[]
Default: []

Specifies the constructors that should be excluded, with this rule taking precedence over others.

"unicorn/no-instanceof-builtins": [
	"error",
	{
		"exclude": [
			"String",
			"Number"
		]
	}
]

useErrorIsError

Type: boolean
Default: false

Specifies using Error.isError() to determine whether it is an error object.

"unicorn/no-instanceof-builtins": [
	"error",
	{
		"strategy": "strict",
		"useErrorIsError": true
	}
]

This option will be removed at some point in the future.