Visual Studio 开箱即用地提供功能强大的 JavaScript 编辑体验。 Visual Studio 依托于基于 TypeScript 的语言服务,提供强大的 IntelliSense 功能、对现代 JavaScript 特性的支持,以及包括转到定义、重构等在内的多种效率工具。
有关 Visual Studio 的常规 IntelliSense 功能的详细信息,请参阅 使用 IntelliSense。
JavaScript IntelliSense 显示有关参数和成员列表的信息。 此信息由 TypeScript 语言服务提供,该服务使用后台的静态分析来更好地了解代码。
TypeScript 使用多个源来构建此信息:
基于类型推理的 IntelliSense
在 JavaScript 中,大多数情况下没有可用的显式类型信息。 幸运的是,通常很容易根据代码的上下文识别出类型。 此过程称为类型推理。
对于变量或属性,类型通常是用于初始化它或最新值赋值的值的类型。
var nextItem = 10;
nextItem; // here we know nextItem is a number
nextItem = "box";
nextItem; // now we know nextItem is a string
对于函数,可以从返回语句推断返回类型。
对于函数参数,目前没有推理,但有办法使用 JSDoc 或 TypeScript .d.ts 文件解决此问题(请参阅后面的部分)。
此外,对于以下内容,还有特别的推理:
- 使用构造函数和原型属性的赋值指定的“ES3 样式”类。
- CommonJS 样式的模块模式,指定为
exports
对象上的属性赋值或对module.exports
属性的赋值。
function Foo(param1) {
this.prop = param1;
}
Foo.prototype.getIt = function () { return this.prop; };
// Foo will appear as a class, and instances will have a 'prop' property and a 'getIt' method.
exports.Foo = Foo;
// This file will appear as an external module with a 'Foo' export.
// Note that assigning a value to "module.exports" is also supported.
基于 JSDoc 的 IntelliSense
如果类型推理不提供所需的类型信息(或支持文档),则可以通过 JSDoc 注释显式提供类型信息。 例如,若要为部分声明的对象指定特定类型,可以使用标记 @type
,如下所示:
/**
* @type {{a: boolean, b: boolean, c: number}}
*/
var x = {a: true};
x.b = false;
x. // <- "x" is shown as having properties a, b, and c of the types specified
如前所述,永远不会推断函数参数。 但是,使用 JSDoc @param
标记,也可以向函数参数添加类型。
/**
* @param {string} param1 - The first argument to this function
*/
function Foo(param1) {
this.prop = param1; // "param1" (and thus "this.prop") are now of type "string".
}
请参阅 JavaScript 文件类型检查 中关于 JSDoc 批注的 JSDoc 信息,以了解当前支持的批注。
基于 TypeScript 声明文件的 IntelliSense
由于 JavaScript 和 TypeScript 基于同一语言服务,因此它们能够以丰富的方式进行交互。 例如,可以为 在.d.ts 文件(请参阅 TypeScript 文档)中声明的值提供 JavaScript IntelliSense,在 TypeScript 中声明的接口和类等类型可用于在 JSDoc 注释中用作类型。
下面显示了一个简单的 TypeScript 定义文件示例,该文件提供同一项目中 JavaScript 文件的此类类型信息(通过接口)(使用 JSDoc
标记)。
自动获取类型定义
在 TypeScript 世界中,最受欢迎的 JavaScript 库具有由 .d.ts 文件描述的 API,此类定义的最常见存储库位于 DefinitelyTyped上。
默认情况下,语言服务会尝试检测正在使用哪些 JavaScript 库,然后自动下载并引用描述库的相应 .d.ts 文件,以提供更丰富的 IntelliSense。 这些文件将下载到位于用户文件夹下 %LOCALAPPDATA%\Microsoft\TypeScript的缓存。
注意
如果使用的是 tsconfig.json 配置文件,此功能默认处于禁用状态,但可能设置为启用,如本部分中的进一步所述。
目前,自动检测适用于从 npm 下载的依赖项(通过读取 package.json 文件)、Bower(通过读取 bower.json 文件),以及项目中与前 400 个最常用的 JavaScript 库列表匹配的松散文件。 例如,如果项目中有 jquery-1.10.min.js,则会提取并加载文件 jquery.d.ts,以便提供更好的编辑体验。 此 .d.ts 文件不会影响项目。
设置 IntelliSense
可以通过选择 “工具 > 选项 > 文本编辑器 > JavaScript/TypeScript > IntelliSense > 常规”来更改 IntelliSense 语句完成的行为。
选择 “仅使用 Tab”或“Enter”提交时,JavaScript 代码编辑器仅在选择 Tab 或 Enter 键后,才会在完成列表中追加选定项的语句。 取消选中此复选框时,其他字符(如句点、逗号、冒号、打开括号和左大括号({))也可以追加带有选定项的语句。