【问题标题】:Is there auto-import functionality for typescript in Visual Studio Code?Visual Studio Code 中的打字稿是否有自动导入功能?
【发布时间】:2015-07-12 22:25:49
【问题描述】:

是否有任何快捷方式可以让我自动生成我的打字稿导入?就像在类型名称旁边按 ctrl+space 并将导入声明放在文件顶部一样。如果不是,那么用于填写模块引用路径的智能感知怎么样,这样我就不必手动完成了?我真的很想使用 vscode,但必须手动导入 typescript 让我很丧。

【问题讨论】:

    标签: visual-studio-code


    【解决方案1】:

    这刚刚在version 1.18 发布。

    来自发行说明:

    JavaScript 和 TypeScript 的自动导入

    通过自动导入 JavaScript 和 TypeScript 来加速您的编码。建议列表现在包括当前项目中的所有导出符号。开始输入:

    如果你从另一个文件或模块中选择一个建议,VS Code 会自动为它添加一个导入。在此示例中,VS Code 将 Hercules 的导入添加到文件顶部:

    自动导入需要 TypeScript 2.6+。您可以通过设置 "typescript.autoImportSuggestions.enabled": false 来禁用自动导入。

    【讨论】:

      【解决方案2】:

      我相信名为“TypeScript Importer”的插件完全符合您的意思:https://marketplace.visualstudio.com/items?itemName=pmneo.tsimporter

      自动搜索工作区文件中的 TypeScript 定义,并提供所有已知符号作为完成项以允许代码完成。

      有了它,您可以真正使用 Ctrl+Space 来选择您想要导入的内容。

      您可以从 Ctrl+Shift+X 菜单中找到并安装它,或者只需在打开的快速打开菜单中粘贴 ext install tsimporter 即可Ctrl+P.

      【讨论】:

      • 欢迎提供解决方案的链接,但请确保您的答案在没有它的情况下有用:add context around the link 这样您的其他用户就会知道它是什么以及为什么会出现,然后引用最相关的内容您链接到的页面的一部分,以防目标页面不可用。 Answers that are little more than a link may be deleted.
      • @MAR,嗯,当答案不符合您的“完美答案”标准时,我不喜欢将答案标记为“无用”......无论如何,它更好吗现在?
      • 我不是投反对票的人,所以无法提供我没有投反对票的理由。
      • @M.A.R.好吧,对不起,我当时不公正地指责了你。有人可以解释一下否决票吗?
      【解决方案3】:

      我知道 Visual Studio 的解决方案(不是 Visual Studio Code,我使用的是免费的 2015 社区版),但它需要一些设置和编码 - 但是,我发现结果是足够的。

      基本上,在Visual Studio中,当使用Web-Essentials扩展时,.ts文件可以拖入活动文档,自动生成相对引用路径注释:

      /// <reference path="lib/foo.ts" />
      

      当然我们不妨用它来擦除它,因为我们需要的是import 声明,而不是参考评论。

      出于这个原因,我最近为 Visual Commander 编写了以下命令 sn-p,但它也应该很容易适应其他用例。使用 Visual Commander,您可以将所需的导入拖动到打开的文档中,然后运行以下宏:

      using EnvDTE;
      using EnvDTE80;
      using System.Text.RegularExpressions;
      
      public class C : VisualCommanderExt.ICommand
      {
          // Called by Visual Commander extension.
          public void Run(EnvDTE80.DTE2 DTE, Microsoft.VisualStudio.Shell.Package package) 
          {
              TextDocument doc = (TextDocument)(DTE.ActiveDocument.Object("TextDocument"));
              var p = doc.StartPoint.CreateEditPoint();
              string s = p.GetText(doc.EndPoint);
      
              p.ReplaceText(doc.EndPoint, this.ReplaceReferences(s), (int)vsEPReplaceTextOptions.vsEPReplaceTextKeepMarkers);
          }
      
          // Converts "reference" syntax to "ES6 import" syntax.
          private string ReplaceReferences(string text)
          {
              string pattern = "\\/\\/\\/ *<reference *path *= *\"([^\"]*)(?:\\.ts)\" *\\/>";
      
              var regex = new Regex(pattern);
              var matches = Regex.Matches(text, pattern);
      
              return Regex.Replace(text, pattern, "import {} from \"./$1\";");
          }
      }
      

      运行此 sn-p 时,活动文档中的所有引用 cmets 都将替换为 import 语句。上面的例子转换为:

      import {} from "./lib/foo";
      

      【讨论】:

        【解决方案4】:

        tsconfig.json 文件中的 files 属性允许您在整个项目中设置引用导入。它受 Visual Studio Code 支持,但请注意,如果您使用特定的构建链(例如 tsify/browserify),它在编译项目时可能无法正常工作。

        【讨论】:

        • 嗨,弗雷德里克。谢谢回复。导入外部模块时怎么办。有什么帮助吗?
        【解决方案5】:

        有传言说它支持 tsconfig.json(嗯,比传闻好)。这将使我们能够使用所有文件作为参考。

        您的功能是将所有常用的 3rd 方库自动导入到类型中。也许会自动扫描文件并创建要收集的文件列表。使用 tsd 直接从 Code 中(以交互方式)快速添加其中的几个不是很好吗?

        【讨论】:

        • 嗨,约翰。谢谢回复。导入外部模块时怎么办。有什么帮助吗?
        猜你喜欢
        • 2019-05-01
        • 1970-01-01
        • 2023-01-30
        • 1970-01-01
        • 2018-09-16
        • 2023-03-24
        • 2015-08-04
        • 1970-01-01
        • 2020-12-28
        相关资源
        最近更新 更多