所以我有一个带有数据属性的响应对象。 对于本示例,其数据是文本类型。 我想要数据属性,并且希望 VSCode 能够识别它的类型,这样我就可以获得一些 IntelliSense 的喜爱。
const response = await someRequest();
const {data} = response;
我首先尝试:
const response = await someRequest();
/** @type {string} */
const {data} = response;
不,所以我尝试:
const response = await someRequest();
const {
/** @type {string} */
data,
} = response;
这也不起作用。
然后我尝试:
/**
* @typedef {Object} Response
* @property {string} data
*/
/** @type {Response} */
const response = await someRequest();
const { data } = response;
成功了!
我不确定它有多大区别,但我正在使用 VSCode 2020 年 9 月(版本 1.50)。
编辑:我改变了问题的结束方式,因为事实证明我的最后一个例子确实有效......
/**
* @typedef {Object} Response
* @property {string} data
*/
/** @type {Response} */
const response = await someRequest();
const { data } = response;
我认为这不起作用,但它确实有效,所以我将其标记为答案。
感谢 Dolly 的评论:如何使用 jsdoc 记录解构变量。 虽然不完全合适,但它确实回答了我的问题。
jsdoc的简单方法如下:
/** @type {{data:string}} */
const response = await someRequest();
const {data} = response;
如果您可以控制 someRequest 函数,那就更好了,就像这样对其进行 jsdoc :
/** @returns {Promise<{data:string}>} */
async function someRequest() {
return {data: ""}
}
const response = await someRequest();
const {data} = response;
最后,为了完整起见,您可以将其内联到几个位置。这是一个例子:
const {data} = /** @type {{data:string}} */ (await someRequest()) || {};