Я уже давно использовал Visual Studio JavaScript функциональность Intellisense и в основном был доволен тем, насколько хорошо он предлагает рекомендации для стандартных API, но я обнаружил, что я не могу заставить Visual Studio понимать объекты конфигурации (т.е. один объект с несколькими необязательными или требуемыми свойствами в качестве аргумента функции).
Официальный синтаксис JSDoc предполагает, что если у параметра, как ожидается, будут свойства, вы создаете отдельную строку @param
для каждого и используете точечную нотацию:
/**
* @param {Object} config
* @param {String} config.name
* @param {Number} config.gold
*/
function do_it(config) { ... }
Однако Visual Studio не распознает это - он отображает config
, config.name
и config.gold
как три отдельных параметра верхнего уровня.
Хуже того, функции AutoComplete внутри тела метода не распознают параметры, а тем более их типы:
Единственное решение, которое, похоже, даже близко работает в Visual Studio, заключается в том, чтобы писать никогда не называемые конструкторские функции с соответствующей документацией (теги @constructor
и @property
), что заставляет меня писать много мертвого кода, а также идти против Бесполезный менталитет JavaScript (именно поэтому я использую объекты конфигурации в первую очередь). Это даже не позволяет мне писать объект конфигурации!
Не только это, но я также знаю, что Visual Studio не нуждается в этом. Например, когда я написал вызов этой библиотечной функции, он смог получить, что объект аргумента нуждается в свойствах, называемых id
, source
и target
, и предложили эти имена, когда я создал объектный литерал для аргумента функции, и без отдельной строки документации. Предположительно, это исходило из простого факта, что они использовались:
Конечно, метод действительно генерирует исключения, если эти свойства не находятся на объекте и не имеют нужного типа, но все же.
EDIT:. Недавно мне удалось воспроизвести эффект в моем собственном коде несколько с параметрами литерала объекта - я назвал одну функцию с четко определенным объектом, и он дал мне предложения Intellisense, когда я вызвал функцию снова в другом месте моего кода. Но у меня до сих пор нет информации типа или семантического доступа внутри тела функции.
Visual Studio явно понимает концепцию объектов конфигурации и делает некоторую логику для предоставления предлагаемых свойств. Что это за алгоритм? И как я могу использовать его без искажения моего кода?