typescript - 无法在 TypeScript 中导入模块

标签 typescript visual-studio-2017

我知道有很多关于如何通过 NPM 将依赖项导入 TypeScript 的主题。我尝试执行以下操作

npm install --save node-fetch

然后 import * as fetch from 'node-fetch在我的app.ts .

为了使用 fetch在我的代码中。

但是我无法在我的代码中使用该库,并且出现以下错误:

Error TS2307 (TS) Cannot find module 'node-fetch'.



我查看了 node_modules 下加载的模块并找到 node-fetch在那里,因此我假设该库已成功安装。许多上述线程还提到了一些tsconfig -file,我无法在我的项目中找到它。似乎 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 模块,如 https://stackoverflow.com/a/15597395/2528063 所示。并安装node-fetch再次进入本地项目无济于事。

最佳答案

TL;博士
您缺少 node-fetch 的类型你应该像这样安装它们:

npm i --save-dev @types/node-fetch
解释
一些包带有自己的类型,一些作为单独的包发布类型,其他的类型由第 3 方创建(node-fetch 包是 created by David Frank,而 @types/node-fetch 由 DefinitiveTyped 维护,node-fetch 类型有是 created by many people ),一些包根本没有公共(public)类型(通常是更等值的包),你可以 create your own typings declarations .
其他一些观察
随意跳过...
看来你和 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(即不是基于浏览器的项目)项目,您可能应该使用 CommonJSES6模块种类而不是 ES2015 .见 here .
如果它是一个浏览器项目,您可能不应该使用 node-fetch ;改为添加 DOM到您的 typescript 库列表并使用 window.fetch 中的 fetch或只是 fetch因为它将是全局范围的一部分。

关于typescript - 无法在 TypeScript 中导入模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60356970/

相关文章:

javascript - 从 2.7.x 升级到 2.8.x 后出现 TypeScript 错误 TS2349

Angular 6 - 行为主题 : get data to stay after refresh

python - 如何将自定义类及其变量/方法添加到 Visual Studio Intellisense?

c# - Nuget 包更新 - Microsoft.Data.SqlClient.SNI.x64

c# - 需要 SQL Server 2012 Express LocalDB

typescript - for-in语句

typescript - 将对象属性限制为 keyof 接口(interface)

javascript - typescript 不理解字符串数组中的第一项是字符串

visual-studio - Visual Studio 不打开 TypeScript *.ts 文件?

c++ - 如何在 Visual Studio 上更改特定关键字颜色?