在 Visual Studio 中为 TypeScript 拖放 ES6 导入
Drag-and-drop ES6 imports in Visual Studio for TypeScript
目前在 Web-Essentials 中(针对 Visual Studio 2015),如果将解决方案资源管理器中的 .ts
文件拖放到打开的 .ts
文件中,参考路径为自动插入顶部:
/// <reference path="../playback/key.ts" />
当使用内部模块(命名空间)开发项目时这很好,但在外部时几乎没用。我怎样才能生成 ES6 import statement 呢?那将是真棒。如:
import {} from "../playback/key";
原来我们看到的是 Web-Essentials 的内置功能。我已经提交了 feature-request 以获得此功能,希望在不久的将来。
同时,以下 Visual Commander 自动化片段可以替换对 ES6 导入的所有引用:
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 \"./\";");
}
}
用于执行此替换的正则表达式是(没有双反斜杠,更具可读性):
\/\/\/ *<reference *path *= *"([^"]*)(?:\.ts)" *\/>
此代码段将有效地将当前活动文档中的所有参考注释转换为 ES6 导入,非常有用。
已知问题:
- 如果包含
reference
标签的评论前面有相应行中的其他文本,则 Visual Studio 无法识别该评论,但它仍会被此代码段替换
reference
标记后的附加文本有效,但替换后会导致语法错误,因为它不再是注释。
(如果在拖放 .ts
文件时在 Web-Essentials 生成的参考标签上使用代码段,则这些问题都不相关。)
目前在 Web-Essentials 中(针对 Visual Studio 2015),如果将解决方案资源管理器中的 .ts
文件拖放到打开的 .ts
文件中,参考路径为自动插入顶部:
/// <reference path="../playback/key.ts" />
当使用内部模块(命名空间)开发项目时这很好,但在外部时几乎没用。我怎样才能生成 ES6 import statement 呢?那将是真棒。如:
import {} from "../playback/key";
原来我们看到的是 Web-Essentials 的内置功能。我已经提交了 feature-request 以获得此功能,希望在不久的将来。
同时,以下 Visual Commander 自动化片段可以替换对 ES6 导入的所有引用:
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 \"./\";");
}
}
用于执行此替换的正则表达式是(没有双反斜杠,更具可读性):
\/\/\/ *<reference *path *= *"([^"]*)(?:\.ts)" *\/>
此代码段将有效地将当前活动文档中的所有参考注释转换为 ES6 导入,非常有用。
已知问题:
- 如果包含
reference
标签的评论前面有相应行中的其他文本,则 Visual Studio 无法识别该评论,但它仍会被此代码段替换 reference
标记后的附加文本有效,但替换后会导致语法错误,因为它不再是注释。
(如果在拖放 .ts
文件时在 Web-Essentials 生成的参考标签上使用代码段,则这些问题都不相关。)