在 Typescript 中使用 npm 模块

Posted

技术标签:

【中文标题】在 Typescript 中使用 npm 模块【英文标题】:Using npm modules in Typescript 【发布时间】:2016-07-18 11:42:29 【问题描述】:

我想在 Typescript 项目中使用 npm 模块,但该模块没有打字或 tsd。当我尝试使用 import Module from 'module' 时出现错误:Cannot find module 'module'. 有没有办法修复它?

[编辑] 我的tsconfig.json


  "compilerOptions": 
    "target": "ES5",
    "moduleResolution": "node",
    "module": "commonjs",
    "noEmitOnError": true,
    "noImplicitAny": true,
    "experimentalDecorators": true,
    "sourceMap": true,
    "sourceRoot": "src",
    "outDir": "bld"
  ,
  "exclude": [
    "bld"
  ]

【问题讨论】:

已在this other S/O question回复 【参考方案1】:

我假设您的问题与导入模块有关

import Module from 'module'

而不是像你所说的那样导出它。如果是这种情况,您可以回退到普通的 javascript 并需要这样的模块:

var Module = require('module');

[编辑]

验证 tsconfig.json 中的编译器选项中有以下几行:

"compilerOptions":  
    "moduleResolution": "node",
    "module": "commonjs"

希望这会有所帮助。

【讨论】:

是的,这是关于导入的问题。对我来说,这两种变体都不起作用。我想,问题是module 没有类型定义,并且打字稿不在node_modules 中寻找它。但我不知道如何解决它。 不,第二个版本不需要类型定义。检查更新的答案。 我根据您的更改修复了 tsconfig.json,但出现了同样的错误:Cannot find module 'module'。请检查更新的tsconfig.json 模块安装了吗?您能否验证模块的文件夹是否存在于您的“node_modules”文件夹中? 唯一想到的是您的模块不是针对 commonjs 编译的。您可以使用任何其他没有定义的模块来测试它。以 'merge2' 为例,通过 npm 安装它并验证 var merge = require('merge2'); 是否有效。【参考方案2】:

如果你不想用 requires 污染你的导入,你可以按照下面的方法。

您可以创建一个module.d.ts 定义文件,其中包含以下内容

declare module Module 

您的导入现在应该可以工作了。

如果你想导入类似的东西

import  abc  from 'module';

继续添加以下内容到module.d.ts

declare module Module 
    export let abc: any

【讨论】:

【参考方案3】:

例如: npm install numwords

然后添加导入 .ts 文件: 从'num-words'导入*作为numwords;

然后是用法: console.log((numwords(5));

【讨论】:

以上是关于在 Typescript 中使用 npm 模块的主要内容,如果未能解决你的问题,请参考以下文章

为啥我在使用 Typescript 的 .net 核心项目中的 NPM 模块出现此错误?

如何在 Visual Studio 2019 中使用具有功能的 .net core + typescript + webpack + npm 模块?

如何在 TypeScript npm 模块中导出类型

NPM 模块 + TypeScript 最佳实践

如何使用 typescript / gulp / browserify 导入 npm 模块

用于无类型 npm 模块的 TypeScript 自定义声明文件