Visual Studio Code 中的打字稿是不是有自动导入功能?

Posted

技术标签:

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

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

【问题讨论】:

【参考方案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 中(以交互方式)快速添加其中的几个不是很好吗?

【讨论】:

嗨,约翰。谢谢回复。导入外部模块时怎么办。有什么帮助吗?

以上是关于Visual Studio Code 中的打字稿是不是有自动导入功能?的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio Code 忽略打字稿版本设置

React 本机流程、打字稿和 Visual Studio Code

转到 Typescript 源定义而不是 Visual Studio Code 中的编译定义

如何在 Visual Studio Code 1.5.2 中设置 jsx 语法高亮和 Intellisense?

组合 Visual Studio Code 构建任务

使用 Visual Studio Code 批量删除 AngularJS 项目中未使用的导入