2017-07-01 27 views
0

我刚刚在打字稿中编写了我的第一个节点包。它有6个模块,每个模块有几百行代码。为了让测试通过,我已经把声明放在每个模块的顶部;它们被包含在其他模块中(以及其他所有内容)。了解打字稿模块和声明文件之间的关系

现在我需要通过其他打字稿模块使其消耗 - 所以我需要创建一个“index.d.ts”文件。

我想知道是否最好的方式来构建它是让该文件包含其他?因此,例如,如果我有模块foo.tsbar.ts,我应该创建foo.d.tsbar.d.ts,然后将它们包含在index.d.ts? (我是否应该将它们想象成c中的“.h”文件?)

另外,如何将定义返回到模块? foo.ts应该从foo.d.ts导入吗?当bar.tsfoo进口时,是否获得合并版本bar.tsbar.d.ts?即使它们全部从index.d.ts导入,这与从index.ts导入的区别如何?

解释如何导入与模块和同名的声明交互将是非常有用的。

+2

你在这里问七度这样的问题。作为一个能够帮助你的人,我认为你有必要区分(a)你真正想要回答的单个问题(b)你正在做的事情是以问题的形式出现的。这将使我更容易提供与(a)相关的答案。 –

回答

0

As @ShaunLuttin指出我在这里问了很多问题。我的问题标题中的关键词是“理解” - 我误解了“d.ts”和“ts”文件的关系,但我想我已经澄清了它。

关键步骤是将"declarations": true添加到我的tsconfig.json文件中。这会导致所有模块的声明文件自动生成并与文件一起放入dist/。我的外卖,把它化学计量:

foo.ts <=> foo.d.ts + foo.js + foo.js.map 

换句话说,我只是通过移动界面到我的源代码目录“.d.ts”文件的思维混乱的自己。包装内的打字稿源是自给自足的;是否将接口分解为源中的其他打字稿(不是声明文件)是一个正交问题。

声明文件是指类型组件,用于补充跨包边界传递的JavaScript代码。 (在理论上,甚至应该能够从“d.ts”+“.js”文件后退到“.ts”文件; @ S.Klechkovski指出,源地图文件包含相关信息[谢谢!]。 ..我仍然认为没有一种工具可以将三者结合在一起。)打字稿仍然是“单一权威点”,以满足“不要重复自己”的要求。

[注:我会离开我的答案不被接受了几天的情况下,有人可以给一个清楚的解释。]

+1

* .d.ts文件仅包含相应* .ts文件的类型声明。声明文件仅供TypeScript编译器用于类型检查。编译器也可以生成源地图(“soureMap”:true)。源映射可用于将编译后的代码映射回TypeScript。 foo.js + foo.js.map <=> foo。TS –