我有一个TypeScript项目,我在一年前开始工具/语言/库处于选择模块系统令人困惑和冒险的阶段 - 所以我没有选择。
我使用tsd
为外部库提取.d.ts
文件,编译器很高兴。我偶尔使用/// <reference src=""
来获取我自己的文件而没有其他任何东西(没有模块系统)。
我让TypeScript编译器创建一个单独的输出JavaScript文件,我从网页引用,前面是对外部库的引用(依赖顺序)。
一切都很好。
我现在转换为(通过TypeScript)转换为CommonJS的ES6模块。我也没有引用托管我的JavaScript结果的网页中的依赖项,但是将使用browserify
将所有内容捆绑在一起。
最后,问题是:我如何确保在编译时中TypeScript编译器警告缺少引用外部代码的import
语句?
在当前代码中,由于我使用tsd
(很快typings
)所有声明文件都包含在源代码树中,编译器会看到它们并且很高兴。但是,输出中没有require
d(我还没有为外部代码添加import
语句),如果我自己没有在最终HTML中包含依赖项(我不想要再做一次,我希望browserify
为我捆绑所有东西),代码将不起作用,而且我必须运行它以查看它不起作用(TypeScript的全部意义是捕获尽可能多的错误正如我在编译时所做的那样,而不是在运行代码时。)
当我使用import
语法时,编译工作并且require
在JavaScript中发出,但仅如果存在TypeScript定义文件(我有点期待)编译器要查看node_modules
,但由于只有JavaScript存在,我猜它不能真正知道哪些符号已被导出。)
为了让编译器告诉我需要为外部代码添加import
的位置,我尝试删除tsd
生成的输入,这会对我引用外部的所有地方产生错误依赖关系,但如果我继续删除打字,我就不能再编译了(不是没有错误)。
我知道这听起来像“有蛋糕,也吃它”的情景,但我有一种感觉,我错过了一些明显的东西。
如果有的话,最好的方法是什么?或者我应该继续我的“删除打字,盲目地输入import
,只要有编译错误,然后放回打字并祈祷事情在运行时工作”?