当使用.d.ts
模式导入类型(import x = require('...')
)文件时,当package.json时语义会发生变化
typings
使用条目。
例如,以下声明文件在否时成功导入
使用package.json typings
条目,但生成错误TS2656
(Exported external package typings file is not a module
)使用时
带有typings
条目:
declare module 'mymodule' {
export function myfunc(source: string): string;
}
而减去
declare module {}
的同一文件已成功导入当与package.json
typings
条目一起使用但生成错误时TS2307(
Cannot find module
)当不带typings
条目使用时。export function myfunc(source: string): string;
为什么要更改语义?
看起来,如果您使用新的npm键入功能,则必须
维护键入文件的npm版本和非npm版本。
我在尝试在
项目本身(TypeScript不在当前项目的
用于
typings
条目的package.json,似乎限制了它的搜索范围到
./node_modules
)。使用TypeScript 1.7.5测试。
最佳答案
对于the documentation,package.json中的typings
key 是main
key 的类似物,它指向单个Node.js模块。因此,由d.ts
指向的typings
文件也应该是单个导出的模块声明,而不是d.ts包。
该文档给出的具体原理是:
(就您个人而言,我认为这种实现是完全错误和愚蠢的。typings
键应该指向一个包含多个描述整个包的相对declare module './foo' { … }
声明的文件,以此避免大量TypeScript-污染文件系统。不幸的是,这艘船已经航行了,所以您的程序包只需要与JavaScript模块并排放置大量特定于TypeScript的d.ts
文件,以及此冗余的关于主模块类型的描述。)