Объявляющий модуль вызывает ошибку lint ‘Неожиданный токен, ожидаемый «{«‘

#typescript

#typescript

Вопрос:

Я создал файл omnivore.d.ts , чтобы заставить typescript игнорировать, что в этой библиотеке нет доступных типов. В файле у меня есть строка

 declare module '@mapbox/leaflet-omnivore'
  

Когда я запускаю vue-cli-service lint свой проект, он выдает ошибку в строке

 error: Parsing error: Unexpected token, expected "{"

> 1 | declare module '@mapbox/leaflet-omnivore'
    |                                          ^ 
  

Я выполнил несколько поисковых запросов и вижу другие сообщения, включающие объект после строки, но я не вижу, что я должен добавить в этом случае. Из того, что я могу сказать, в этом коде нет ничего функционально неправильного, потому что страница, похоже, загружается и работает нормально, но из-за этой ошибки lint мой CI не работает.

Комментарии:

1. Вы можете начать с добавления {}

2. @AlekseyL. Это приводит к новой ошибке lint Empty block statement (no-empty)

3. Таким образом, вы можете добавить некоторые типы или отключить это правило для этой строки

4. @Qwertie Попробуйте добавить точку с запятой (;) в конце вашего заявления declare ( declare module '@mapbox/leaflet-omnivore'; )

Ответ №1:

Я изменил его на

 declare module '@mapbox/leaflet-omnivore' {/* empty */}
  

это то, что eslint предлагает для блоков, которые должны быть пустыми.

Комментарии:

1. вы не получаете ошибку lint при импорте из ‘@mapbox / leaflet-omnivore’?

2. Да, @Avinash Я получаю ошибку lint при импорте / использовании имен классов при таком подходе. Это исправляет первоначальную ошибку, но создает новую. This expression is not callable. Type 'typeof import("classnames")' has no call signatures.ts(2349)

Ответ №2:

Эта ошибка возникает, когда я начал с lint-staged , почему я указал только конец расширений *. {js, jsx, ts, tsx} , заставляя lint проверять все файлы, в которых они есть.

Это сработало для меня: добавьте ! оператор к расширению, которое вы хотите игнорировать:

Это работает!

 {
 "husky": {
    "hooks": {
      "pre-commit": "lint-staged"
    }
  },
  "lint-staged": {
    "*.{js,jsx,ts,tsx}, !*.d.{ts}": [
      "yarn run lint"
    ]
  }
}