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