Как в Node.js заметить отсутствующую функцию?

В некоторых Node.js у меня было

function examp() {
    ..
    blah = bestAvailableDelauneySlot()
    ..
}

Однако функции bestAvailableDelauneySlot вообще не существовало.

(В моем случае я по глупости забыл ввести модуль, поэтому он должен был быть blah = triangles.bestAvailableDelauneySlot() ..)

Теперь код

  blah = bestAvailableDelauneySlot()

ВООБЩЕ не создает никаких ошибок, пока по какой-то причине examp не будет вызвана во время выполнения. (Что бывает только в неясных ситуациях, раз в неделю).

VSCode совсем не говорит мне, что для bestAvailableDelauneySlot нет определения. «использование строгого», похоже, не помогает.

Как, черт возьми, защититься от неопределенного имени функции ??

Простая опечатка

blah = triangles.bestAvailableDelauneySlozz()

и крах. Решение?

Возможно, в идеале что-то, что интегрируется с VSCode?

(Кстати, я обычно использую VSCode на Mac... возможно, проблема в этом: O)

решение состоит в том, чтобы сделать тесты или, по крайней мере, проверить неясный код, который все еще работает перед слиянием

Lawrence Cherone 11.12.2020 20:01

@LawrenceCherone - потрясающе; так что нет общего пакета, инструмента, чего бы то ни было, что обнаруживает такие вероятные проблемы?!?! спасибо.

Fattie 11.12.2020 20:02

Как вы можете быть уверены, что метод не существует? Он может быть создан во время выполнения.

xehpuk 11.12.2020 20:03

@xehpuk - точно так же, как вызов функции, начинающейся с обычного текста или тому подобного, на более строго защищенном языке. Тем не менее, кажется невероятным, что нет инструмента, который, например, как вы предлагаете, предупреждал бы одного «ЭТА ФУНКЦИЯ ДОЛЖНА БЫТЬ СОЗДАНА ВО ВРЕМЯ ВЫПОЛНЕНИЯ» ... вы знаете ?! Я никогда не видел IDE, которая этого не делает; может мне просто нужна другая IDE или такая?!? спасибо еще раз

Fattie 11.12.2020 20:06

... но взгляните на ESLint.

xehpuk 11.12.2020 20:06

Полагаться на IDE для поиска таких проблем программирования на нетипизированном языке, таком как Javascript, — просто неудачная стратегия. Вам либо нужны модульные тесты, либо вы захотите переключиться на типизированный язык, который применяет определения во время компиляции (например, TypeScript), или и то, и другое. То, с чем вы столкнулись, это Javascript. Вот как это работает (или не работает в данном случае). Возможно также, что линтер также поможет отметить это.

jfriend00 11.12.2020 20:08
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
5
6
695
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Инструмент ESLint является стандартом де-факто для проверки наличия проблем в коде JavaScript.

В вашем конкретном случае правило no-undef сообщит о необъявленной функции.

Также есть расширение для Visual Studio Code с более чем 12 миллионами загрузок:

правило 'no_undef' - какой невероятный совет. Спасибо. вы бы сказали, что я могу использовать «правило no_undef» в варианте VSCode ?? награда в пути...

Fattie 11.12.2020 23:23

@Fattie Я не постоянный пользователь VSC, но он должен работать нормально, если проект настроен правильно. Я добавил скриншот с вашим примером.

xehpuk 12.12.2020 00:07

Я хочу предоставить два метода. Я надеюсь, что это может помочь вам. Подробнее в Проверка типов 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/*"]
}

Другие вопросы по теме