невозможно импортировать модуль в TypeScript - PullRequest
3 голосов
/ 23 февраля 2020

Я знаю, что существуют десятки тем о том, как импортировать зависимость в TypeScript через NPM. Я попытался сделать следующее

npm install --save node-fetch

и затем import * as fetch from 'node-fetch в моем app.ts.

, чтобы использовать fetch в моем коде.

Однако Я не могу использовать эту библиотеку в своем коде и получаю следующую ошибку:

Ошибка TS2307 (TS) Не удается найти модуль 'node-fetch'.

Я заглянул в загруженные модули под node_modules и нашел там node-fetch, поэтому я предполагаю, что библиотека была успешно установлена. Многие из упомянутых тем также упоминали о файле tsconfig, который я не смог найти в своем проекте. Кажется, у VS есть своя собственная идея о том, как реализовать настройки для TypeScript, которые находятся в моем файле csproj:

<TypeScriptLib>es2015</TypeScriptLib>
<TypeScriptTarget>ES5</TypeScriptTarget>
<TypeScriptJSXEmit>None</TypeScriptJSXEmit>
<TypeScriptModuleKind>ES2015</TypeScriptModuleKind>
<TypeScriptCompileOnSaveEnabled>True</TypeScriptCompileOnSaveEnabled>
<TypeScriptNoImplicitAny>False</TypeScriptNoImplicitAny>
<TypeScriptRemoveComments>False</TypeScriptRemoveComments>
<TypeScriptOutFile />
<TypeScriptOutDir />
<TypeScriptGeneratesDeclarations>False</TypeScriptGeneratesDeclarations>
<TypeScriptNoEmitOnError>True</TypeScriptNoEmitOnError>
<TypeScriptSourceMap>True</TypeScriptSourceMap>
<TypeScriptMapRoot />
<FilesToIncludeForPublish>AllFilesInTheProject</FilesToIncludeForPublish>

Я также получил это для других библиотек, например, leaflet-geosearch.

Это мой package.json:

{
  "name": "myproject",
  "version": "1.0.0",
  "devDependencies": {
    "@types/d3": "^5.7.2",
    "@types/jquery": "^3.3.32",
    "@types/leaflet": "^1.5.8",
    "@types/leaflet-geosearch": "^2.7.1",
    "d3": "^5.15.0",
    "jquery": "^3.4.1",
    "leaflet": "^1.6.0",
    "leaflet-geosearch": "^2.7.0",
    "node-fetch": "^2.6.0"
  }
}

Я уже удалил глобальные npm -модули, как показано на { ссылка }, и установил node-fetch в опять местный проект безрезультатно.

1 Ответ

5 голосов
/ 02 марта 2020

TL; DR

Вам не хватает типов для node-fetch, вы должны установить их следующим образом:

npm i --save-dev @types/node-fetch

Объяснение

Некоторые пакеты поставляются со своими собственными типами, некоторые публикуют sh, печатая как отдельный пакет, другие имеют типизации, созданные третьей стороной (пакет node-fetch - это , созданный David Frank , тогда как @types/node-fetch поддерживается DefiniteTyped , а типы node-fetch были созданы многими людьми ), в некоторых пакетах вообще нет типизации publi c (обычно больше isoteri c пакетов) и вы можете создавать свои собственные объявления о наборе .

Некоторые другие наблюдения

Не стесняйтесь пропускать ...

Похоже, вы перепутали с dependencies против devDependencies. dependencies должен включать все пакеты, которые должны существовать во время выполнения (например, node-fetch в вашем случае), тогда как devDependencies являются дополнительными зависимостями, необходимыми для времени сборки (например, любой пакет @types или любой используемый пакет только для создания проекта, например webpack / grunt, если применимо).

Так что все это, вероятно, должно перейти к dependencies:

"d3": "^5.15.0",
"jquery": "^3.4.1",
"leaflet": "^1.6.0",
"leaflet-geosearch": "^2.7.0",
"node-fetch": "^2.6.0"

И наконец, если это проект nodejs (т.е. не проект на основе браузера), вам, вероятно, следует использовать модуль CommonJS или ES6, а не ES2015. см. здесь . Если является проектом браузера, вам, вероятно, не следует использовать node-fetch; вместо этого добавьте DOM в список библиотек машинописного текста и используйте выборку из window.fetch или просто fetch, поскольку это будет частью глобальной области видимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...