假设我编写一个节点模块m
。后来,我决定向它添加Typescript类型。幸运的是,该模块只导出一个函数,因此m.d.ts文件如下所示:
/// <reference path="./typings/globals/node/index.d.ts" />
declare module "m" {
doThings(b: Buffer): int;
export = doThings;
}
我的函数使用节点的Buffer
,所以我在安装的typings
文件夹中包含了对节点类型的有效引用(没有它,Sublime给了我"无法找到名称'Buffer'消息,这似乎是一件坏事)。一切看起来都很好,所以我更新package.json
中的typings
键并进行部署。
另外,我在一个单独的typescript项目p
中使用模块m
。我不必担心使用typings
,因为我的模块包含类型。当我运行tsc
时,我得到以下错误:node_modules/m/m.d.ts(6,1): error TS6053: File '/Users/$USER/projects/p/node_modules/m/typings/globals/node/index.d.ts' not found.
这很有意义,因为在node_modules
中没有typings
文件夹(我认为检查生成的文件夹是不鼓励的)。当一个类型文件被加载到DefinitelyTyped中时,它会去掉所有的三斜杠引用(最佳实践表明不应该在d.ts文件中包含它们)。当有一个类型文件加载到npm模块中时,没有任何东西被剥离。
m
)中具有有效的类型,而不包括外部项目(p
)中的破碎引用?多谢了!
我能把蛋糕也吃了吗?是否有可能在我的模块(m)中具有有效的类型,而不包括外部项目(p)中的破碎引用?
您没有将node.d.ts
作为参考标记。相反,你指定人们需要在他们的编译上下文中包含node.d.ts
,例如使用tsconfig.json.