带有import语句的TypeScript intellisense - VS代码

时间:2015-07-31 02:23:19

标签: typescript visual-studio-code

我希望VSCode intellisense能够理解我的TS import语句的语义。如果确实如此,那么VSCode可以尝试将这些语句解析为文件并从这些文件中提取类型而不需要任何注释。有时可以,如果它能找到导出我导入内容的打字稿文件。但是,有时候它不能这样做,特别是当我导入一个用环境声明输入的库时。但几乎我要导入的所有东西都是用环境声明输入的,所以这是一个大问题。

我理解这是因为import语句根据模块标志编译到不同的东西这一事实很复杂,并且生成的import语句可能有一层额外的运行时路由会混淆基于文件的简单搜索策略。

完美世界中,由于我们正在做梦,我希望能够引用一个requirejs config object,定义为独立的json文件或在tsconfig中字面定义.json,并让VS Code使用requirejs routing semantics将导入的moduleid解析为磁盘上的文件(或者在我的import语句在运行时不能解析为模块时,在编译时警告我)。 p>

然而,即使能够智能感知搜索列表中的所有路径以启发式地找到我导入的模块也会很好,这将是模块加载器不可知的。通过在顶部施加类似requirejs的路由层,理论上可以解析到与TS找到的模块不同的模块;在大多数情况下它可以工作,但奇怪的球可以用注释处理。

我认为目前在任何编辑器中都不可能有这些东西,包括VSCode。很可能他们将来会在那里,但就目前而言,我很好奇其他人如何获得智能感知。我愿意竭尽全力避免<reference path=.../>注释,因为它们是代码重复。

我的一些库使用DefinitelyTyped包输入,但其中一些不是,例如,其中一些是已经浏览化的内部模块。所以tsd不是一个完整的解决方案。

一级&#34;解决方案&#34;是简单地在每个文件中使所有类型的项目可用,例如通过合并整个项目中的每个类型声明,包括来自.d.ts文件的环境模块,然后引用该集合,只要两个环境模块没有命名空间冲突。此解决方案一直有效,直到存在命名空间冲突,然后它永久停止工作。所以我不喜欢这个主意。

还有什么更好的吗?有没有人得到tsserver工作?我可以找到关于它的文档很少 - 我只知道它存在,因为我注意到它是在我安装节点的tsc实现时安装的。

2 个答案:

答案 0 :(得分:1)

  

有没有人让tsserver工作

它为编辑。您正在寻找的自定义需要进入编译器而不是TSServer。

并且它在计划

请参阅此问题:https://github.com/Microsoft/TypeScript/issues/2338

将会发生两件事:

  • TypeScript将能够解析为.d.ts文件,例如require解析为.js文件。

  • 您将能够使用路径映射配置此分辨率,路径映射将是requirejs + systemjs路径映射的超集。

答案 1 :(得分:0)

TypeScript团队随后解决了我的所有顾虑。他们为tsconfig.json提供了扩展,允许我们声明模块解析并模仿所有主要模块系统(requirejs,webpack,browserify)的解析策略。

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