eslint/valid-typeof Correctness
What it does
Enforce comparing typeof
expressions against valid strings.
Why is this bad?
For a vast majority of use cases, the result of the typeof
operator is one of the following string literals: "undefined"
, "object"
, "boolean"
, "number"
, "string"
, "function"
, "symbol"
, and "bigint"
. It is usually a typing mistake to compare the result of a typeof
operator to other string literals.
Examples
Examples of incorrect code for this rule:
js
typeof foo === "strnig";
typeof foo == "undefimed";
typeof bar != "nunber"; // spellchecker:disable-line
typeof bar !== "fucntion"; // spellchecker:disable-line
Examples of correct code for this rule:
js
typeof foo === "string"
typeof bar == "undefined"
typeof foo === baz
typeof bar === typeof qux
```js
### Options
#### requireStringLiterals
`{ type: boolean, default: false }`
The `requireStringLiterals` option when set to `true`, allows the comparison of `typeof`
expressions with only string literals or other `typeof` expressions, and disallows
comparisons to any other value. Default is `false`.
With `requireStringLiterals` set to `true` the following are examples of incorrect code:
```js
typeof foo === undefined
typeof bar == Object
typeof baz === "strnig"
typeof qux === "some invalid type"
typeof baz === anotherVariable
typeof foo == 5
With requireStringLiterals
set to true
the following are examples of correct code:
js
typeof foo === "undefined";
typeof bar == "object";
typeof baz === "string";
typeof bar === typeof qux;
How to use
To enable this rule in the CLI or using the config file, you can use:
bash
oxlint --deny valid-typeof
json
{
"rules": {
"valid-typeof": "error"
}
}