理解typescript模块和声明文件之间的关系

时间:2017-07-01 01:12:08

标签: typescript

我刚刚在typescript中编写了我的第一个节点包。它有6个模块,每个模块有几百行代码。为了通过测试,我在每个模块的顶部放置了声明;它们根据需要包含在其他模块中(以及其他所有模块)。

现在我需要让它可以被其他打字稿模块使用 - 所以我需要创建一个“index.d.ts”文件。

我想知道构建它的最佳方法是将该文件包含在其他文件中吗?那么,例如,如果我有模块foo.tsbar.ts,我应该创建foo.d.tsbar.d.ts,然后将它们包含在index.d.ts中吗? (我应该把它们想象成c中的“.h”文件吗?)

另外,如何将定义恢复到模块?应foo.tsfoo.d.ts导入吗?当bar.tsfoo导入时,是否会获得bar.tsbar.d.ts的合并版本?即使它们都是从index.d.ts导入的,但这与从index.ts导入的区别如何?

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

1 个答案:

答案 0 :(得分:0)

正如@ShaunLuttin指出的那样,我在这里提出了很多问题。我的问题标题中的关键词是"理解" - 我误解了" d.ts"和" ts"文件,但我想我已经澄清了它。

关键步骤是将"declarations": true添加到我的tsconfig.json文件中。这导致我的所有模块的声明文件被自动生成并放在dist/.js文件旁边。我的外卖,按化学计量:

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

换句话说,我只是想把界面移到&#34; .d.ts&#34;我的源目录中的文件 。包中的打字稿来源是自给自足的;是否将接口分解为源中的其他打字稿文件(而非声明文件)是一个正交问题。

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

[请注意,如果有人能给出更清楚的解释,我会在几天内不接受我的回答。]

相关问题