IntelliSense для JavaScript
Visual Studio обеспечивает эффективное редактирование JavaScript без дополнительной подготовки. На основе языковой службы TypeScript Visual Studio предоставляет широкие возможности IntelliSense, поддержку современных функций JavaScript и функции повышения производительности, такие как Переход к определению, рефакторинг и многое другое.
Дополнительные сведения об общих функциональных возможностях IntelliSense в Visual Studio см. в разделе Использование технологии IntelliSense.
В JavaScript IntelliSense отображаются сведения о списках параметров и членов. Эта информация предоставляется службой языка TypeScript, которая использует статический анализ за кулисами, чтобы лучше понять код.
Для формирования такой информации TypeScript использует несколько источников.
- IntelliSense на основе определения типа
- IntelliSense на основе JSDoc
- IntelliSense на основе файлов объявления TypeScript
- Автоматическое получение определений типов
IntelliSense на основе определения типа
В большинстве случаев явные сведения о типах в JavaScript недоступны. К счастью, обычно довольно легко выяснить тип, учитывая окружающий контекст кода. Этот процесс называется определением типа.
Для переменной или свойства типом обычно является тип значения, используемый для его инициализации, либо последнее присвоенное значение.
var nextItem = 10;
nextItem; // here we know nextItem is a number
nextItem = "box";
nextItem; // now we know nextItem is a string
Для функции тип возвращаемого значения можно вывести из операторов return.
Для параметров функций вывод сейчас отсутствует, однако это можно обойти с помощью файлов .d.ts TypeScript или JSDoc (см. в следующих разделах).
Кроме того, есть специальный вывод для следующих элементов:
- Классы в стиле 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.
IntelliSense на основе JSDoc
Если вывод типов не предоставляет необходимые сведения о типе (или для поддержки документации), сведения о типе могут предоставляться явным образом с помощью заметок 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
Как уже упоминалось, параметры функции никогда не выводятся. Однако с помощью тега @param
JSDoc можно добавить типы и в параметры функции.
/**
* @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.
IntelliSense на основе файлов объявления TypeScript
Так как JavaScript и TypeScript основаны на одной языковой службе, они могут взаимодействовать с широкими возможностями. Например, JavaScript IntelliSense можно предоставить для значений, объявленных в файле .d.ts (см. документацию по TypeScript), а типы, такие как интерфейсы и классы, объявленные в TypeScript, доступны для использования в качестве типов в комментариях JsDoc.
Ниже показан простой пример файла определения TypeScript, предоставляющий подробные сведения о типе (через интерфейс) файлу JavaScript в том же проекте (с помощью тега JsDoc
).
Автоматическое получение определений типов
В среде TypeScript API наиболее популярных библиотек JavaScript описываются файлами .d.ts, а наиболее распространенным репозиторием для таких определений является DefinitelyTyped.
По умолчанию языковая служба пытается определить, какие библиотеки JavaScript используются, а затем автоматически скачивать и ссылаться на соответствующий файл .d.ts , описывающий библиотеку, чтобы обеспечить более широкий набор возможностей IntelliSense. Файлы скачиваются в кэш, расположенный в пользовательской папке в %LOCALAPPDATA%\Microsoft\TypeScript.
Примечание.
Эта функция отключена по умолчанию, если вы используете файл конфигурации tsconfig.json , но его можно включить, как описано ниже.
В настоящее время автоматическое обнаружение работает для зависимостей, скачанных из npm (считывая package.json-файл ), Боуер (считывая файл bower.json ), а также для свободных файлов в проекте, которые соответствуют списку примерно 400 самых популярных библиотек JavaScript. Например, если у вас в проекте есть jquery-1.10.min.js, для расширения возможностей редактирования будет получен и загружен файл jquery.d.ts. Этот файл .d.ts не оказывает влияния на проект.