💼 This rule is enabled in the ✅ recommended
config.
🔧💡 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.
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'; // ✅
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"
}
]
Type: string[]
Default: []
Specify the constructors that should be validated.
"unicorn/no-instanceof-builtins": [
"error",
{
"include": [
"WebWorker",
"HTMLElement"
]
}
]
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"
]
}
]
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.