TypeScript智能导入语句- VS Code



我希望VSCode智能感知能够理解我的TS import语句的语义。如果是这样,那么VSCode可以尝试将这些语句解析为文件,并在没有任何注释的情况下从这些文件中提取类型。有时可以,如果它能找到导出我导入内容的typescript文件。然而,有时它不能这样做,特别是当我导入一个带有环境声明的库时。但是我想导入的几乎所有东西都是用环境声明键入的,所以这是一个大问题。

我明白,import语句根据模块标志编译成不同的东西,并且生成的import语句可能有一个额外的运行时路由层,这会混淆简单的基于文件的搜索策略,这使得情况变得复杂。

在一个完美的世界里,因为我们在做梦,我希望能够引用一个requires配置对象,定义为一个独立的json文件或字面上定义在tsconfig中。让VS Code使用requires路由语义将导入的moduleid解析为磁盘上的文件(否则,当我的import语句在运行时无法解析为模块时,在编译时警告我)。

然而,即使能够智能地搜索列表中的所有路径,以启发式地找到我要导入的模块,也会很好,这将是模块加载器不可知的。有了一个像路由层一样的需求强加在上面,理论上可以解析到一个不同于TS发现的模块;在大多数情况下,它是可以工作的,但是奇怪的情况可以用注释来处理。


我不认为这两件事目前在任何编辑器中都是可能的,包括VSCode。很有可能它们将来会出现,但现在,我很好奇其他人是如何获得智能感知的。我愿意去极端的长度,以避免<reference path=.../>注释,因为它们是代码重复。

我的一些库是用DefinitelyTyped包来类型化的,但其中一些不是,例如,它们中的一些是已经被浏览器化的内部模块。所以tsd不是一个完整的解决方案。

一个级别的"解决方案"是简单地使项目的所有类型在每个文件中可用,例如,通过合并整个项目的所有类型声明,包括来自。d的环境模块。Ts文件,然后引用该聚合,只要两个环境模块没有名称空间冲突。此解决方案在发生名称空间冲突之前一直有效,然后永久停止工作。所以我不太喜欢这个主意。

还有更好的吗?有人让服务器工作了吗?我可以找到关于它的少量文档—我只知道它存在,因为我注意到它是在安装node的tsc实现时安装的。

有没有人让tsserver工作

是给编辑的。您正在寻找的定制需要进入编译器,而不是TSServer。

它在计划上

查看此问题:https://github.com/Microsoft/TypeScript/issues/2338

会发生两件事:

  • TypeScript将能够像require解析为.js一样解析为.d.ts文件。

  • 你将能够使用路径映射来配置这个分辨率,这将是requires + systemjs路径映射的超集。

我所有的担忧随后都被TypeScript团队解决了。他们提供了对tsconfig的扩展。它允许我们声明模块解析,并模仿所有主要模块系统(requires、webpack、browserify)的解析策略。

都在这里https://www.typescriptlang.org/docs/handbook/module-resolution.html.

最新更新