【问题标题】:TypeScript intellisense with import statement - VS Code带有 import 语句的 TypeScript 智能感知 - VS Code
【发布时间】:2015-07-31 02:23:18
【问题描述】:

我希望 VSCode 智能感知能够理解我的 TS import 语句的语义。如果是这样,那么 VSCode 可以尝试将这些语句解析为文件,并从这些文件中提取类型而无需任何注释。有时它可以,如果它可以找到导出我正在导入的内容的打字稿文件。但是,有时它无法做到这一点,特别是当我导入一个使用环境声明键入的库时。但几乎我要导入的所有内容都是使用环境声明键入的,所以这很重要。

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

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

但是,即使能够让智能感知搜索列表中的所有路径以启发式地找到我正在导入的模块也会很好,这与模块加载器无关。使用像 requirejs 这样的路由层,理论上可以解析到与 TS 找到的模块不同的模块;在大多数情况下,它会起作用,但可以使用注释来处理古怪的问题。


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

我的一些库是使用DefiniteTyped 包进行类型化的,但其中一些不是,例如,其中一些是经过浏览器化的内部模块。所以 tsd 并不是一个完整的解决方案。

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

还有什么更好的吗?有人让 tsserver 工作吗?我几乎找不到关于它的文档——我只知道它存在,因为我注意到它是在我安装 node 的 tsc 实现时安装的。

【问题讨论】:

  • VSCode 确实理解 ES6 导入语句,并且智能感知按您的预期工作。如果您在项目中创建tsconfig.json,VSCode 将默认包含该目录和子目录中的所有.ts 文件。除此之外,我不确定您要的是什么。
  • 它有时确实能理解它们,但在我提到的情况下却失败了。

标签: typescript visual-studio-code


【解决方案1】:

有人让 tsserver 工作吗

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

并且在计划中

看到这个问题:https://github.com/Microsoft/TypeScript/issues/2338

会发生两件事:

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

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

【讨论】:

  • 在此期间仍然对人们如何做事感兴趣。
  • 顺便说一句,我有一个繁重的任务编译和观看打字稿。我唯一不能完全正确的是智能感知(在我的编辑器中),这就是我对 tsserver 感兴趣的原因。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-08
    • 1970-01-01
    • 1970-01-01
    • 2017-06-06
    • 2018-12-01
    • 2018-09-16
    • 1970-01-01
    • 2022-10-05
    相关资源
    最近更新 更多