Visual Studio 2017, несоответствия с intellisense в JavaScript

TL; DR: как включить файл tsconfig.json в Visual Studio 2017 и по-прежнему иметь JavaScript intellisense, работающий как по умолчанию, давая подсказки по коду как для вашего собственного кода, так и для сторонних библиотек? Это не работает, или мне просто нужно лучше понять, как это работает?

Как и jQuery, я хотел бы иметь повсеместный доступ к моим собственным пространствам имен JavaScript через файлы JavaScript и html с помощью intellisense. Как этого добиться?


ИЗМЕНИТЬ 3:
Я сообщил об этой проблеме на developercommunity.visualstudio.com. Пожалуйста, проголосуйте за вопрос, чтобы привлечь больше внимания со стороны Microsoft.


РЕДАКТИРОВАТЬ 2:
В настоящее время «решением» является Resharper, который обеспечивает то, что можно было ожидать прямо из коробки. Но он не совсем идеален по цене 299 долларов в год за пользователя для того, что Visual Studio предлагает сам себе.


РЕДАКТИРОВАТЬ 1:
В случае, если мои ожидания в отношении intellisense JavaScript в Visual Studio неточны, ниже приведен надуманный пример того, как я ожидаю, что он будет работать.

Скажем, я создаю три файла TypeScript в своей папке ./Scripts, мы назовем их A.ts, B.ts и C.ts . Каждый будет содержать свое собственное пространство имен:

A.ts

namespace A {
    export function f1(s: string) {
        return s;
    }
}

B.ts

namespace B {
    export function f1(n: number) {
        return n;
    }
}

C.ts

namespace C {
    export function f1(b: boolean) {
        return b;
    }
}

В этот момент можно ожидать, что вы сможете начать видеть intellisense для своих вновь созданных пространств имен, и действительно, в A.ts, B.ts и C.ts вы начнете видеть intellisense для этих пространств имен. Прохладный.

введите описание изображения здесь

К сожалению, это не распространяется на другие места, такие как /Home/Index.cshtml. Index.cshtml ничего не знает о пространствах имен A, B или C. Кроме того, файлы .js ничего не знают об этих пространствах имен, поэтому им необходимы соответствующие файлы объявлений TypeScript (.d.ts).

Итак, мы продолжим и добавим наш файл tsconfig.json в корень нашего проекта и настроим его, как мы сделали выше. Если мы редактируем один из наших файлов .ts и сохраняем его, это запускает компиляцию наших соответствующих файлов .d.ts в нашу папку ./Scripts/out. Получаем ли мы теперь intellisense в файлах Index.cshtml и .js? ...Нет.

Теперь вы можете подумать, что эти файлы необходимо включить в проект, чтобы Visual Studio могла использовать их для intellisense (они исключаются при создании). Итак, вы включаете их в проект. Intellisense? Нет. JQuery intellisense? Нет. Возможно, они должны находиться в том же каталоге, что и файл, в котором вы хотите их использовать? .....Вроде? Я сталкивался с такой непоследовательностью intellisense в нескольких случаях:

введите описание изображения здесь

Каким-то образом мы получаем intellisense для нашего пространства имен «A» в нашем C3.js (примечание: файл JavaScript), но не для других. Какие?

Возможно, вы думаете, что находитесь на правильном пути и одержали небольшую победу над движком intellisense. Но затем вы перезапускаете свой экземпляр Visual Studio и ...

введите описание изображения здесь

Подождите ... У меня только был intellisense для пространства имен 'A'. Что случилось!?

Я понятия не имею. Но, немного повозившись, я пытаюсь разместить оператор импорта в верхней части файла .js, и внезапно intellisense начинает работать с импортированными файлами / модулями. Ура!

введите описание изображения здесь

И даже в Index.cshtml я начинаю получать intellisense для наших импортированных пространств имен.

введите описание изображения здесь

Однако в тот момент, когда я закрываю файл .js с операторами импорта, я внезапно теряю для них intellisense в Index.cshtml. Чего ждать?? И в отличие от файлов JavaScript, я не могу написать оператор импорта для получения для них intellisense:

введите описание изображения здесь

Или, по крайней мере ... не с моими собственными пространствами имен:

введите описание изображения здесь

Именно эта непоследовательность взад и вперед сбивает меня с толку относительно того, как на самом деле работает Intellisense JavaScript в Visual Studio. Я до сих пор не знаю, сломан ли он просто или мне нужно лучше понять его.


ОРИГИНАЛЬНАЯ ЗАПИСЬ

Система
Windows 10
VS2017 15.0.0 + 26228.10
Включена новая языковая служба JavaScript

Я боролся за то, чтобы Visual Studio 2017 JavaScript intellisense работал у меня в течение нескольких дней, но безрезультатно. Я не знаю, действительно ли что-то не так с IDE, или я просто не понимаю этого должным образом.

Мое понимание того, как работает Intellisense JS в VS2017, теперь основано на определении машинописного текста. файлы или файлы .d.ts. В конечном итоге я хотел бы, чтобы intellisense помог нам с нашим собственным TypeScript / JavaScript, но прямо сейчас я бы согласился просто на то, чтобы он постоянно работал в новом проекте.

Если я создаю новый проект ASP.NET MVC 4.5.2, встроенный JS intellisense, похоже, будет работать нормально, и под этим я подразумеваю, что могу ввести знак доллара ($) либо в файле .js, либо между ‹script>, и я правильно получаю intellisense для jQuery. Потрясающий. Теперь, имея в виду конечную цель создания файлов TypeScript (.ts) и чтобы компилятор TypeScript автоматически генерировал наши файлы .d.ts, чтобы мы могли получить богатый intellisense для нашего собственного кода, я хочу представить файл tsconfig.json в корень проекта, чтобы настроить его.

После создания файла tsconfig.json JS intellisense перестает работать. Я ввожу знак доллара ($) либо в файл .js, либо между тегами ‹script> и получаю нулевой intellisense для jQuery. Некоторое время это было разочаровывающим опытом, но затем я прочитал эту небольшую заметку, найденную на связанной странице выше:

ПРИМЕЧАНИЕ. Эта функция по умолчанию отключена при использовании файла конфигурации tsconfig.json, но может быть включена, как описано ниже).

«Эта функция» относится к «По умолчанию языковая служба Salsa будет пытаться определить, какие библиотеки JavaScript используются ..., чтобы предоставить более богатый IntelliSense». Хорошо, поэтому языковая служба Salsa не будет автоматически определять используемые библиотеки и предоставлять для них intellisense при наличии файла tsconfig.json, если вы специально не настроите его так, как «описано ниже». По крайней мере, я так понимаю.

Если мы немного прокрутим страницу вниз и перейдем к настройкам файла tsconfig, мы обнаружим настройку для enableAutoDiscovery, которая «включает автоматическое обнаружение и загрузку файлов определений, как описано выше». Это не слишком однозначно относительно того, к чему относится «как описано выше», но я могу только предположить, что это относится к предыдущему примечанию, указывающему на повторное включение функции автоматического обнаружения Salsa для обеспечения богатого интеллекта. Поэтому я включаю эту опцию в свой файл tsconfig.json и ... никакой пользы; все еще нет JS intellisense.

Как оказалось, typingOptions.enableAutoDiscovery был переименован в typeAcquisition .enable. Гррррр. Хорошо, мы вносим это изменение в наш tsconfig.json aaaaaaand ... JS intellisense по-прежнему отсутствует.

На данный момент я я могу написать свои собственные файлы .d.ts, и intellisense Visual Studio подберет их нормально (большую часть времени ...), но у меня все еще нет intellisense для третьего- партийные библиотеки вроде jQuery, что никуда не годится.

Пока что я нашел следующий файл tsconfig.json:

{
  "compilerOptions": {
    "noEmitOnError": true,
    "noImplicitAny": false,
    "removeComments": false,
    "target": "es5",
    "declaration": true,
    "declarationDir": "./Scripts/out"
  },
  "compileOnSave": true,
  "typeAcquisition": {
    "enable": true, 
    "include": ["jquery"]
  },
  "include": [
    "./Scripts/app/**/*"
  ],
  "exclude": [
    "./Scripts/vendors/**/*",
    "./Scripts/out/**/*"
  ]
}

С помощью виртуального проекта TypeScript я вижу, что файлы .ts моего проекта включены, а также jQuery в мой каталог% LOCALAPPDATA% \ Microsoft \ TypeScript \ node_modules \ @types.

«Виртуальный

Я надеялся, что со всем этим у меня будет как intellisense для файлов .ts моего собственного проекта, так и сторонние библиотеки (по крайней мере, те, которые специально включены; jQuery только на данный момент). Увы ... нет. По-прежнему нет jQuery intellisense.

Между прочим, если я напишу строку импорта для jQuery, внезапно я получу jQuery intellisense

введите описание изображения здесь

...интересный. И, может быть, это имеет смысл; Я не очень сильно испортил импорт модулей и то, как intellisense Visual Studio обрабатывает их, но я действительно хочу иметь intellisense для всего приложения как для нашего кода, так и для сторонних библиотек.


person Caleb Bergman    schedule 28.03.2017    source источник
comment
Я испытывал такое же поведение. Некоторое время у меня был intellisense для моих пространств имен. И внезапно я потерял их всех. Не могу понять, как он читает и создает intellisense для javascript / typescript в vs 2017   -  person Ashkan Hovold    schedule 27.04.2017
comment
Сейчас, конечно, июнь. Мне интересно, добились ли вы прогресса в этом вопросе? Мне удалось заставить Intellisense работать в VS2017 с файлом tsconfig.json после изменения узла TypeScriptToolsVersion файла проекта на 2.2. Какая у вас версия инструментов?   -  person Markus    schedule 20.06.2017


Ответы (1)


Похоже, что последнее обновление 14 марта 2017 г. (сборка 26228.09) вызывало эту проблему, вы можете перейти в Панель управления - Программы и компоненты - Просмотр установленных обновлений и удалить это обновление, а затем снова открыть VS, чтобы проверить intellisense. Если это сработает, а это означает, что это обновление приводит к этой проблеме, вы можете временно не устанавливать это обновление.

Я заметил, что проекты отчетов Microsoft для расширения Visual Studio могут вызывать такие проблемы при использовании в проекте. Некоторые из них сломались сразу после того, как я добавил свой проект отчета SQL Server в решение и перезапустил визуальную студию. на данный момент я удаляю свой проект отчета из решения, но надеюсь, что Microsoft исправит эту проблему

person Don'tQuestionMe    schedule 29.03.2017
comment
Есть ли какие-либо источники, подтверждающие, что указанное обновление действительно нарушило Intellisense JavaScript? Тем не менее, у меня все равно не установлено это обновление, так что это не так. И, как уже упоминалось, все вышеперечисленные шаги были выполнены в новом проекте ASP.NET MVC 4.5.2; в решение не было добавлено никаких дополнительных проектов. - person Caleb Bergman; 30.03.2017
comment
В настоящее время он указан в списке известных проблем для VS2017: visualstudio.com/ ru-us / news / releasenotes / Найдите заголовок: JavaScript IntelliSense перестает работать - person Don'tQuestionMe; 30.03.2017