no-instanceof-builtins
March 27, 2026 ยท View on GitHub
๐ 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, andArray.'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.