Ошибки TypeScript с «Не удалось найти файл объявления» для * косвенной * зависимости - PullRequest
0 голосов
/ 01 октября 2018

У меня есть следующий "noImplicitAny": true проект с dependencies (не devDependencies):

  • wr
    • u
      • bluebird

Теперь, когда я пытаюсь скомпилировать wr, tsc ошибки с:

node_modules/u/dist/src/lib/dynamo/Dynamo.d.ts:1:27 - error TS7016: Could not find a declaration file for module 'bluebird'. '/home/ronjouch/work/wr/node_modules/bluebird/js/release/bluebird.js' implicitly has an 'any' type.
  Try `npm install @types/bluebird` if it exists or add a new declaration (.d.ts) file containing `declare module 'bluebird';`

1 import * as Bluebird from 'bluebird';
                            ~~~~~~~~~~

Но:

  • wr не имеет ничего общего с bluebird, я не хочу @types/bluebird в wr devDeps / deps.
  • u имеет @types/bluebird в devDependencies, и это имеет смысл, потому что они необходимы для сборки u, но бесполезны для его запуска, поэтому я не хочу перемещать их в dependencies (обычный deps / devDepsнюанс).

Я понимаю ошибку (и исправляю), когда дело доходит до моего кода проекта, но что я должен делать, когда это происходит, как здесь, на косвенная зависимость?Есть ли механизм ТС для покрытия этого случая?(Игнорировать noImplicitAny для кода зависимостей? Автоматически получать наборы?)

Спасибо.

1 Ответ

0 голосов
/ 01 октября 2018

Если этот файл node_modules/u/dist/src/lib/dynamo/Dynamo.d.ts, который зависит от @types/bluebird и загружается с помощью wr, является частью общедоступного API u, то официальная рекомендация состоит в том, чтобы поставить @types/bluebirdв dependencies из u именно для того, чтобы избежать этой проблемы.В принципе, package.json может поддерживать другой тип зависимости, который u может объявить на @types/bluebird, что приведет к установке @types/bluebird при запуске npm install на wr, но не при запуске npm install --production.Но, как я понимаю, многие пакеты связывают объявления типов в одном пакете, поэтому, если u имеет bluebird в dependencies, добавление @types/bluebird к dependencies не хуже, чем если bluebird связал егообъявления типов, и люди не должны жаловаться на это.

Если node_modules/u/dist/src/lib/dynamo/Dynamo.d.ts является , а не частью общедоступного API u, то вам следует выяснить, почему wr являетсязагружаем его и разрываем цепь.

...