Как получить intellisense для извлеченных переменных? - PullRequest
2 голосов
/ 17 января 2020

Проблема

Я пытаюсь реорганизовать часть своего кода в , извлекая аргумент функции в глобальную константу. Однако, как только я это сделаю, я теряю возможность использовать при редактировании этого объекта!

Некоторые примеры

Действительно я хочу эту функциональность с инструментами и библиотеками, которые я не знаком с, но для простоты, я сделал простой пример ниже, чтобы продемонстрировать, что я имею в виду.

Пример с intellisense

Example with intellisense

Пример, в котором извлеченный объект не имеет intellisense

Extracted example without intellisense

Пример для тестирования

/**
 * Example to test intellisense
 * @param {Object} person 
 * @param {string} person.first 
 * @param {string} person.last 
 */
function sayName(person) {
  console.log(person.first, person.last);
}

// Intellisense works here! ?
sayName({first: "Robert", last: "Todar"});

// Intellisense doesn't work here.. ☹
const person = {
  first: "Robert",
  last: "Todar"
}
sayName(person);

Вопрос

Есть ли способ получить intellisense, когда я извлек аргумент из функции?

1 Ответ

3 голосов
/ 18 января 2020

Я считаю, что вам нужно использовать @ typedef , который будет действовать как Global Definition, тогда вам нужно будет добавить @ type или @ param на сверху каждого нового объекта | functions .

Синтаксис будет выглядеть следующим образом:

/**
 * @typedef {object} person creates a new type 'object' named 'person'
 * @property {string} first - a 'string' property of 'person'
 * @property {string} last - a another 'string' property of 'person'
 * @property {number} [age] - an optional 'number' property of 'person'
 */

Для Функции add /** @param {person} name */ Это сообщит IntelliSense, что имя параметр относится к объекту персонажа свойства . (@arg, @argument тоже работает)

/** @param {person} name */
function sayName(name) {
    // IntelliSense works here
    console.log(name.first, name.last)
}

// and here too
sayName({})

enter image description here


Что касается Объекты: добавить /** @type person */, который сообщит IntelliSense, что john объект совпадает с person object.

/** @type person */
const john = {}

enter image description here


...