nodejs需要在TypeScript文件中

时间:2012-10-05 08:05:52

标签: node.js typescript

如何在node_modules类中加载常规NodeJS模块(来自TypeScript)?

当我尝试编译包含以下内容的.ts文件时

var sampleModule = require('modulename');

编译器提示我在此范围内无法使用require。 (该行位于文件的开头)。

5 个答案:

答案 0 :(得分:91)

在无法找到符号时,Typescript会一直抱怨。编译器与windowdocument的一组默认定义结合在一起,并在名为lib.d.ts的文件中指定。如果我在此文件中为require执行grep,则无法找到函数require的定义。因此,我们必须告诉编译器这个函数将在运行时使用declare语法存在:

declare function require(name:string);
var sampleModule = require('modulename');

在我的系统上,这个编译得很好。

答案 1 :(得分:43)

正确的语法是:

import sampleModule = require('modulename');

import * as sampleModule from 'modulename';

然后使用--module commonjs编译TypeScript。

如果该软件包没有附带index.d.ts文件且其package.json没有"typings"属性,则tsc会咆哮它我不知道'modulename'指的是什么。为此,您需要在http://definitelytyped.org/上找到.d.ts文件,或者自己写一个。

如果您正在为Node.js编写代码,您还需要http://definitelytyped.org/中的node.d.ts文件。

答案 2 :(得分:37)

最好的解决方案是获取Node的类型定义的副本。这将解决各种依赖性问题,而不仅仅是require()。这是以前使用像typings这样的软件包完成的,但正如Mike Chamberlain所说,不推荐使用Typings。现代的方式就是这样:

npm install --save-dev @types/node

它不仅会修复编译器错误,还会将Node API的定义添加到IDE中。

答案 3 :(得分:4)

使用typings从TypeScript访问节点函数:

typings install env~node --global

如果您没有打字,请安装它:

npm install typings --global

答案 4 :(得分:0)

加载打字稿模块时,我使用带有扩展名的模块名称,即 “.ts”

const sampleModule = require('modulename.ts');

仅供参考,在我的例子中,“node”命令(v14.17.1)直接使用“.ts”文件而不生成“*.js”文件。