JavaScript IntelliSense
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".
}
有关当前支持的 JsDoc 注释,请参阅 类型检查 JavaScript 文件 中的 JsDoc 信息。
基于 TypeScript 声明文件的 IntelliSense
由于 JavaScript 和 TypeScript 基于同一语言服务,因此它们能够以丰富的方式进行交互。 例如,可以为在 .d.ts 文件中声明的值提供 JavaScript IntelliSense(请参阅 TypeScript 文档),并且 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 文件不会影响项目。