如何从TypeScript
类中加载常规NodeJS模块(从node_modules
)?
当我尝试编译包含以下内容的.ts
文件时:
var sampleModule = require('modulename');
我不能使用的编译器提示需要这个作用域。(该行位于文件的开头)。
发布于 2012-10-05 16:26:40
Typescript在找不到符号时总是会报错。编译器附带了一组在名为lib.d.ts
的文件中指定的window
、document
等的默认定义。如果我在这个文件中对require
执行grep,我找不到函数require
的任何定义。因此,我们必须自己告诉编译器,这个函数将在运行时使用declare
语法存在:
declare function require(name:string);
var sampleModule = require('modulename');
在我的系统上,这段代码编译得很好。
发布于 2016-02-03 15:47:12
正确的语法是:
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
文件。
发布于 2017-10-19 05:20:07
最好的解决方案是复制Node的类型定义。这将解决所有类型的依赖问题,而不仅仅是require()
。这之前是使用像typings
这样的包来完成的,但正如Mike Chamberlain所提到的,Typings已经被弃用。现代的方法是这样做的:
npm install --save-dev @types/node
它不仅可以修复编译器错误,还可以将Node API的定义添加到IDE中。
https://stackoverflow.com/questions/12742082
复制相似问题