TypeScript编译器处理Node模块名时使用的是
Node.js模块解析算法
。
TypeScript也可以同时加载与npm包绑在一起的类型声明文件。
编译通过下面的规则来查找
"foo"
模块的类型信息:
尝试加载相应代码包目录下
package.json
文件(
node_modules/foo/
)。
如果存在,从
"typings"
字段里读取类型文件的路径。比如,在下面的
package.json
里,编译器会认为类型文件位于
node_modules/foo/lib/foo.d.ts
。
"name"
:
"foo"
,
"author"
:
"Vandelay Industries"
,
"version"
:
"1.0.0"
,
"main"
:
"./lib/foo.js"
,
"typings"
:
"./lib/foo.d.ts"
尝试加载在相应代码包目录下的名字为
index.d.ts
的文件(
node_modules/foo/
) - 这个文件应该包含了这个代码包的类型信息。
解析模块的详细算法可以在
这里
找到。
你的定义文件应该
是
.d.ts
文件
写做外部模块
不包含
///<reference>
引用
基本的原理是类型文件不能引入新的可编译代码;
否则真正的实现文件就可能会在编译时被重盖。
另外,
加载类型信息不应该污染全局空间
,当从同一个库的不同版本中引入潜在冲突的实体的时候。