no-new-native-nonconstructor
Запрещает использование операторов new с глобальными функциями, не являющимися конструкторами
Использование конфигурации recommended из @eslint/js в файле конфигурации включает это правило
В JavaScript принято считать, что глобальные переменные, начинающиеся с заглавной буквы, обычно представляют классы, экземпляры которых можно создавать с помощью оператора new, например new Array и new Map. Однако в JavaScript также есть глобальные переменные, начинающиеся с заглавной буквы, которые нельзя вызывать с помощью оператора new: такая попытка приведёт к ошибке. Обычно это функции, связанные с типами данных, которые легко принять за классы. Рассмотрим следующий пример:
// throws a TypeError
const foo = new Symbol("foo");
// throws a TypeError
const result = new BigInt(9007199254740991);
И new Symbol, и new BigInt вызывают ошибку типа, так как это функции, а не классы. Легко допустить такую ошибку, предположив, что заглавные буквы указывают на классы.
Подробное описание правила
Это правило предназначено для предотвращения случайного вызова встроенных глобальных функций JavaScript с помощью оператора new. К таким функциям относятся:
SymbolBigInt
Примеры неправильного кода для этого правила:
/*eslint no-new-native-nonconstructor: "error"*/
const foo = new ('foo');
const bar = new (9007199254740991);
Примеры правильного кода для этого правила:
/*eslint no-new-native-nonconstructor: "error"*/
const foo = Symbol('foo');
const bar = BigInt(9007199254740991);
// Ignores shadowed Symbol.
function baz(Symbol) {
const qux = new Symbol("baz");
}
function quux(BigInt) {
const corge = new BigInt(9007199254740991);
}
Параметры
У этого правила нет параметров.
Когда не следует использовать это правило
Это правило не следует использовать в средах ES3/5.
Обрабатывается TypeScript
Это правило можно безопасно отключить при использовании TypeScript, поскольку компилятор TypeScript выполняет эту проверку.
Связанные правила
Версия
Это правило появилось в ESLint v8.27.0.
Дополнительная литература
Ресурсы
© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/no-new-native-nonconstructor