#node.js #undefined
#node.js #неопределенный
Вопрос:
В некоторых Node.js , у меня было
function examp() {
..
blah = bestAvailableDelauneySlot()
..
}
Однако функция bestAvailableDelauneySlot
вообще не существовала.
(В моем случае я по глупости забыл ввести модуль, так что так и должно было быть blah = triangles.bestAvailableDelauneySlot()
..)
Теперь, код
blah = bestAvailableDelauneySlot()
вообще не создает никаких ошибок, пока по какой-либо причине examp
не вызывается во время выполнения. (Что случается только в непонятных ситуациях, раз в неделю).
VSCode вообще не говорит мне, что нет определения для bestAvailableDelauneySlot
. «использование строгого режима», похоже, не помогает.
Как, черт возьми, защититься от неопределенного имени функции??
Простая опечатка
blah = triangles.bestAvailableDelauneySlozz()
и крах. Решение?
Возможно, в идеале что-то, что интегрирует w / VSCode?
(Кстати, я обычно использую VSCode на Mac… возможно, в этом-то и проблема: O)
Комментарии:
1. решение состоит в том, чтобы провести тесты или, по крайней мере, проверить, что неясный код все еще выполняется перед слиянием
2. @LawrenceCherone — удивительно; значит, нет общего пакета, инструмента или чего-то еще, что выявляло бы такие вероятные проблемы ?!?! спасибо.
3. Как вы можете быть уверены, что этот метод не существует? Он может быть создан во время выполнения.
4. @xehpuk — конечно, точно так же, как вызов функции, начинающейся с обычного текста или тому подобного на более строго защищенном языке. Однако кажется невероятным, что нет инструмента, который, например, как вы предлагаете, предупреждал бы о том, что «ЭТА ФУНКЦИЯ ДОЛЖНА БЫТЬ СОЗДАНА ВО ВРЕМЯ ВЫПОЛНЕНИЯ»… ты знаешь?! Я никогда не видел IDE, которая этого не делала бы; может быть, мне просто нужна другая IDE или что-то в этом роде ?!? спасибо еще раз
5. … но взгляните на ЭСЛинт .
Ответ №1:
Инструмент ESLint является стандартом де-факто для проверки наличия проблем в коде JavaScript.
В вашем конкретном случае правило no-undef
сообщит о необъявленной функции.
Существует также расширение для Visual Studio Code с более чем 12 миллионами загрузок:
Комментарии:
1. правило «no_undef» — какой невероятный совет. Спасибо. не могли бы вы сказать, что я могу использовать «правило no_undef» в варианте VSCode?? баунти в пути …
2. @Fattie Я не являюсь постоянным пользователем VSC, но он должен работать просто отлично, если проект настроен правильно. Я добавил скриншот с вашим примером.
Ответ №2:
Я хочу предложить два метода. Я надеюсь, что это могло бы вам помочь. Более подробно в разделе Проверка типов JavaScrip.
Примечание: это vscode.
Первый
Вы могли бы просто добавить // @ts-check
заголовок файла для проверки. Перед добавлением // @ts-check
он не сообщает вам об ошибке (bestAvailableDelauneySlot не существует).
Затем вы добавите // @ts-check
, и он скажет вам, что его не существует.
Затем вы объявляете функцию, ошибка исчезает.
Если вы допустите какую-то опечатку, появится сообщение об ошибке.
И это также работает в module.exports и require. Нет // @ts-check
.
Добавить // @ts-check
.
Второй
Если вы не хотите добавлять //@ts-check
по каждому файлу, вы можете создать jsconfig.json
в корне проекта, чтобы включить проверку целых файлов с добавлением checkJs
jsconfig.json
. Его эффект такой же, как при добавлении //@ts-check
во все файлы.
{
"compilerOptions": {
"checkJs": true
},
"exclude": ["node_modules", "**/node_modules/*"]
}