Объявление об ошибке, проверьте файл журнала

Обновлено: 05.07.2024

Мне больше всего нравится в TypeScript постепенный набор текста. Мне не нужно доказывать компилятору, что я могу отказаться. Но иногда отказаться сложнее, чем в других случаях.

После публикации этого блога мы запустили новую платформу автоматизации на основе событий. Наша платформа предлагает готовые средства автоматизации, называемые навыками , которые автоматизируют важные задачи, чтобы вы могли работать более продуктивно. Вы можете поддерживать чистоту своего кода TypeScript и обновлять зависимости с помощью Atomist Skills.

Когда я импортирую модуль JS, не созданный для TS, мне мешает компилятор. Там написано что-то вроде:

Как обойти эту ошибку?

Вот восемь исправлений, от худшего к лучшему:

TypeScript превратит ваш код в JavaScript даже при наличии ошибок компиляции.

Вы можете запустить свою программу, не исправляя ошибку. Если первое, что вы хотели сделать с этой библиотекой, это попробовать что-нибудь, попробуйте!

Предостережение: параметр компилятора --noEmitOnError заставляет TypeScript отказываться от генерации JavaScript при обнаружении ошибок компиляции. Запустите tsc --noEmitOnError false, чтобы обойти это.

Предостережение: тесты могут блокироваться из-за ошибки. Это происходит со мной, потому что мой тест использует mocha, и мы запускаем mocha с компиляцией TypeScript на лету (наш тестовый скрипт npm запускает mocha --require espower-typescript/guess "test/**/*.test.ts" ) . Иногда mocha вылетает из-за этой ошибки, ничего не выводит и не возвращает ошибку, так что моя сборка выглядит успешной. 😡 Чтобы обойти это: скомпилируйте тест (допустив его сбой), затем запустите mocha на выходе JavaScript, например: $(npm bin)/mocha myParticularTest.test.js

В tsconfig.json в параметрах компилятора установите "noImplicitAny": false . Это заставит его замолчать.

Но тогда вы не получите ошибку, если забудете объявить тип параметра функции. Это плохо!

Внимание: случайное написание кода, похожего на functionsolveAThing(importantParameter) <. > назначит тип any важному параметру. Тогда у вас не будет проверки типа, и он не будет включен в рефакторинг своего типа. Это сжигало нас раньше. 🔥

Это на самом деле мой любимый, но мои коллеги не одобряют.

Создайте файл в любом месте среди ваших файлов .ts. Вставьте в него:

Вот и все, время вечеринки! Все модули, не типизированные иным образом, явно объявляются как any .

Некоторым людям нравится называть этот файл types.d.ts .

Иногда мне нравится называть его allowJavaScriptModules.ts . Это описывает его цель. Не похоже, чтобы этот файл содержал полезные типы.

Вы можете создать файл .d.ts напрямую или создать файл .ts и позволить компилятору вывести .d.ts для вас.

Осторожно: если вы создаете файл .d.ts, вы должны научить .gitignore заботиться о нем. Вы, вероятно, исключили вывод компилятора (включая .d.ts ) из git. Добавьте строку в конец .gitignore с "!" для «не игнорировать это», за которым следует ваше имя файла:

Создайте файл где-нибудь среди исходников TypeScript. Назовите его types.d.ts (или как-то так, см. выше) и вставьте в него:

за исключением того, что введите в строку имя модуля, который вы хотите импортировать.

Это делает явное объявление этого модуля как типа any . Это называется «окружающей декларацией», потому что она плавает в глобальном пространстве среди исходных файлов, которые читает компилятор.

Если вам нужны типы, но их никто не создал, то вы создаете то, что вам нужно. Это непросто, но вы получите желаемую безопасность типов.

Если модуль экспортирует только одну вещь (например, функцию или класс), добавьте строку внизу, чтобы указать одну экспортируемую вещь:

Примечание: мне потребовалось некоторое время, чтобы понять это. Я пытался использовать параметры компилятора, такие как --types и --typeRoots, но они ничего не делали. Это проще. Только не забудьте заключить имя модуля в кавычки; иначе объявление не будет найдено.

Пока вы делаете шрифты для пакета, почему бы не сделать их полными? Затем вы можете отправить PR в DefinitelyTyped, и каждый сможет им воспользоваться!

Идеальное решение — прямо в сообщении об ошибке TS7016: npm install @types/ваш-интересующий-пакет .

Это происходит из специального имени пользователя NPM, @types , где люди публикуют объявления TypeScript отдельно от пакетов, которые они объявляют.

Внимание: вводя объявления типов, вы можете сделать это двумя способами. Установка npm по умолчанию поместит их в зависимости вашего проекта. Не идеально; эти типы используются во время компиляции, а не во время выполнения. Обычно зависимости времени сборки добавляются с помощью npm install --save-dev , и они записываются в devDependencies . Они не поставляются с вашим производственным кодом и не добавляются к транзитивным зависимостям.

Внимание: если ваш проект представляет собой библиотеку, то людям, использующим вашу библиотеку, потребуются эти типы.Если вы поместите их в devDependencies , ваши последующие пользователи не получат их, поэтому они получат ошибки компиляции. Когда вы создаете библиотеку, поместите эти типы в зависимости (по умолчанию). Не используйте --save-dev для установки пакетов из @types при публикации библиотеки TypeScript.

Выводы

Восемь! Это множество способов решить одну проблему.

Это гибкость поэтапного ввода TypeScript. Вы можете начать с грубых обходных путей и надеяться, что кто-то другой решит сложные проблемы (путем публикации типов). Или вы можете внести свой вклад сами! Или можно жить без типов, для одного модуля или для всех. Все эти возможности открыты для вас. Выберите, насколько компилятор вызовет у вас затруднения.

И помните: всегда читайте сообщение об ошибке.

Джессика Керр
< /p>

Джессика Керр

Симматолог, разработчик, спикер, мать, сумасшедший. Атомист. Обучение и рост. она/ее

Начните использовать Atomist уже сегодня. Получите ранний доступ.

Контейнеризация проекта Clojure

Наша команда использовала Dockerfiles в течение нескольких лет, но недавно обнаружила, что мы можем получить лучшие результаты, используя только Jib. В этом посте мы покажем вам, как это сделать и где вы увидите наиболее важные результаты.

Контейнеризация проекта Clojure

Наша команда использовала Dockerfiles в течение нескольких лет, но недавно обнаружила, что мы можем получить лучшие результаты, используя только Jib. В этом посте мы покажем вам, как это сделать и где вы увидите наиболее важные результаты.

Подготовка к следующему log4shell

Мы не можем предсказать, где будет следующая уязвимость (или, точнее, где она уже есть). Вместо этого мы должны подготовиться к тому, чего еще не знаем.

Подготовка к следующему log4shell

Мы не можем предсказать, где будет следующая уязвимость (или, точнее, где она уже есть). Вместо этого мы должны подготовиться к тому, чего еще не знаем.

Почему вы, вероятно, игнорируете уязвимости контейнера

Узнавайте, где именно и как уязвимости оказываются в ваших образах контейнеров, чтобы вы могли исправить те из них, которые имеют значение, и перестать игнорировать уязвимости.

Почему вы, вероятно, игнорируете уязвимости контейнера

Узнавайте, где именно и как уязвимости оказываются в ваших образах контейнеров, чтобы вы могли исправить те из них, которые имеют значение, и перестать игнорировать уязвимости.

Убедитесь, что вы знаете, что делаете, и используете один из перечисленных продуктов. Если вы не уверены, спросите своего ИТ-специалиста или MYOB.

В MYOB Accountants Office Classic (AO Classic) при открытии записи клиента в AO Classic или AO Tax Manager может возникнуть следующая ошибка:

"Произошла непредвиденная ошибка. Подробные сведения см. в файле журнала. Причина: требование безопасности удаленной стороны не было выполнено во время аутентификации. Попробуйте повысить ProtectionLevel и/или ImpersonationLevel."

Это также может сопровождаться ошибкой "1429" при открытии подготовки к возврату в AO Classic. Эта ошибка возникает из-за того, что рабочая станция не может получить доступ к службе налогового менеджера MYOB, работающей на сервере.

MYOB рекомендует использовать следующую ссылку Microsoft.

Microsoft: запуск примеров в рабочей группе и на нескольких компьютерах.
В частности, эта ошибка может возникнуть, если вы используете рабочую группу или одноранговую сеть. В рабочей группе файлы и папки доступны другим компьютерам, а службы — нет.

Чтобы устранить эту ошибку, вам необходимо создать учетную запись пользователя Windows на сервере для каждого пользователя, который будет получать доступ с рабочей станции. Эта учетная запись пользователя должна быть точной копией учетной записи пользователя, как имени пользователя, так и пароля, на каждой рабочей станции.

Пример: Джон входит на свою рабочую станцию ​​как «JohnSmith» с паролем «HSV307». Итак, вам нужна учетная запись пользователя с именем «JohnSmith» на сервере с паролем «HSV307». Если Джон когда-либо изменит свой пароль на своей рабочей станции, вам также необходимо изменить пароль учетной записи JohnSmith на сервере, чтобы он совпадал с паролем на рабочей станции.

Это должно быть внутреннее имя учетной записи, а не отображаемое имя учетной записи. Если вы перейдете в Панель управления и выберите «Изменить имя учетной записи», это изменит отображаемое имя учетной записи — базовое имя учетной записи в Windows не изменится. Например, если вы переименуете учетную запись «Администратор» в «Джон Смит», на экране входа в систему Windows отобразится «Джон Смит». Однако, если щелкнуть правой кнопкой мыши на панели задач и выбрать «Запустить диспетчер задач», а затем выбрать вкладку «Процессы», в столбце «Имя пользователя», которым запускаются несистемные процессы, отображается «Администратор». Это имя учетной записи, которую необходимо создать на сервере.

Если ошибка повторится, вам может потребоваться создать нового пользователя как на сервере, так и на рабочей станции, и войти на рабочую станцию, используя этого пользователя.Вам также необходимо перейти в Панель управления > Диспетчер учетных данных и добавить новую запись учетных данных Windows для этого пользователя. Наконец, убедитесь, что для UAC установлено значение «Никогда не уведомлять» в разделе «Панель управления» > «Учетные записи пользователей» > «Изменить параметры контроля учетных записей пользователей» и была применена перезагрузка. Дополнительные сведения см. в статье базы знаний 30854: отключение контроля учетных записей (UAC)

Если вам нужна помощь в настройке любого из вышеперечисленных, обратитесь к специалисту по ИТ-поддержке.

Читайте также: