我知道有很多关于如何通过 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(即不是基于浏览器的项目)项目,您可能应该使用 CommonJS
或 ES6
模块种类而不是 ES2015
.见 here .如果它是一个浏览器项目,您可能不应该使用
node-fetch
;改为添加 DOM
到您的 typescript 库列表并使用 window.fetch
中的 fetch或只是 fetch
因为它将是全局范围的一部分。
关于typescript - 无法在 TypeScript 中导入模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60356970/