如何获得提取变量的智能感知?

How to get intellisense for extracted variables?

问题

我正在尝试在编辑该对象时重构 by extracting an argument of a function to a global constant. However, once I do this I lose the ability to use 中的一些代码!

一些例子

我真的想要这个功能与我不熟悉的工具和库一起使用,但为了简单起见,我在下面做了一个简单的例子来演示我所指的内容。

智能感知示例

提取的对象没有智能感知的示例

测试示例

/**
 * 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);


问题

当我从函数中提取参数时,是否有任何方式获得智能感知?

我相信您需要在每个新对象的 顶部使用 @typedef that will act like a Global Definition then, you'll need to add @type or @param |函数.

语法如下所示:

/**
 * @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'
 */

对于 Functions 添加 /** @param {person} name */ 这将告诉 IntelliSense name 参数指的是人对象 属性。 (@arg@argument 也有效)

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

// and here too
sayName({})


至于 Objects: 添加 /** @type person */ 这将告诉 IntelliSense john 对象与 相同人物 对象

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