如何在 JSDoc(或 TypeScript?)中记录函数自定义类型并引用它们以便 VSCode IntelliSense 工作
How to document function custom types in JSDoc (or TypeScript?) and reference them so VSCode IntelliSense works
我正在尝试将自定义函数类型记录为对象的一部分,如有任何帮助,我们将不胜感激:
问题的背景
这是一个简单的对象声明,其中包含一些函数属性(addCoordinate、addCoordinateOne、addCoordinateTwo),我们将作为 3 个展品进行介绍,以及为什么 none 这些功能有效。
/**
* @typedef {Object} Point
* @property {number} x - The X Coordinate
* @property {number} y - The Y Coordinate
*/
/**
* @typedef {Object} Shape
* @property {Point} startCoordinate - the starting coordinate
* @property {Point[]} coordinates - An array of point coordinates
* @property {(x:string, y:string) => void} addCoordinate - Updates the point
* @property {addCoordinateOne} addCoordinateOne - Updates the point
* @property {addCoordinateTwo} addCoordinateTwo - Updates the point
*/
/** @type {Shape} */
const square = {}
图表 A
@property {(x:string, y:string) => void} addCoordinate - Updates the point
这完全可以工作,但不能像我需要的那样重复使用。
图表 B
/**
* @typedef {Function} addCoordinateOne
* @param {string} X
* @param {string} Y
*/
这种类型的有效,因为它检测自定义函数类型。但它没有正确解析参数。我确保遵循 @typedef
标签的文档:
https://jsdoc.app/tags-typedef.html
图表 C
/**
* @function addCoordinateTwo
* @param {string} X
* @param {string} Y
*/
这完全失败了。尽管这是 JSDoc 的 @function
文档推荐的方法。
https://jsdoc.app/tags-function.html
问题
有什么方法可以让图表 B 或 C 像图表 A 一样工作?
您可以将图表 A 更改为 typedef:
/** @typedef {(x:string, y:string) => void} addCoordinate */
编辑:或者更详细地说,您可以使用 @callback
标签:
/**
* @callback addCoord
* @param {number} x - The x coordinate
* @param {number} y - The y coordinate
* @returns {void}
*/
然后根据需要重复使用:
/**
* @typedef {Object} Point
* @property {number} x - The X Coordinate
* @property {number} y - The Y Coordinate
*/
/**
* @typedef {Object} Shape
* @property {Point} startCoordinate - the starting coordinate
* @property {Point[]} coordinates - An array of point coordinates
* @property {addCoordinate} addCoordinate - Updates the point
* @property {addCoordinate} addCoordinateOne - Updates the point
* @property {addCoordinate} addCoordinateTwo - Updates the point
*/
结果:
如果使用 shorthand 语法,则没有可用的参数说明。
如果使用 @callback
语法,将为每个参数提供说明:
我正在尝试将自定义函数类型记录为对象的一部分,如有任何帮助,我们将不胜感激:
问题的背景
这是一个简单的对象声明,其中包含一些函数属性(addCoordinate、addCoordinateOne、addCoordinateTwo),我们将作为 3 个展品进行介绍,以及为什么 none 这些功能有效。
/**
* @typedef {Object} Point
* @property {number} x - The X Coordinate
* @property {number} y - The Y Coordinate
*/
/**
* @typedef {Object} Shape
* @property {Point} startCoordinate - the starting coordinate
* @property {Point[]} coordinates - An array of point coordinates
* @property {(x:string, y:string) => void} addCoordinate - Updates the point
* @property {addCoordinateOne} addCoordinateOne - Updates the point
* @property {addCoordinateTwo} addCoordinateTwo - Updates the point
*/
/** @type {Shape} */
const square = {}
图表 A
@property {(x:string, y:string) => void} addCoordinate - Updates the point
这完全可以工作,但不能像我需要的那样重复使用。
图表 B
/**
* @typedef {Function} addCoordinateOne
* @param {string} X
* @param {string} Y
*/
这种类型的有效,因为它检测自定义函数类型。但它没有正确解析参数。我确保遵循 @typedef
标签的文档:
https://jsdoc.app/tags-typedef.html
图表 C
/**
* @function addCoordinateTwo
* @param {string} X
* @param {string} Y
*/
这完全失败了。尽管这是 JSDoc 的 @function
文档推荐的方法。
https://jsdoc.app/tags-function.html
问题
有什么方法可以让图表 B 或 C 像图表 A 一样工作?
您可以将图表 A 更改为 typedef:
/** @typedef {(x:string, y:string) => void} addCoordinate */
编辑:或者更详细地说,您可以使用 @callback
标签:
/**
* @callback addCoord
* @param {number} x - The x coordinate
* @param {number} y - The y coordinate
* @returns {void}
*/
然后根据需要重复使用:
/**
* @typedef {Object} Point
* @property {number} x - The X Coordinate
* @property {number} y - The Y Coordinate
*/
/**
* @typedef {Object} Shape
* @property {Point} startCoordinate - the starting coordinate
* @property {Point[]} coordinates - An array of point coordinates
* @property {addCoordinate} addCoordinate - Updates the point
* @property {addCoordinate} addCoordinateOne - Updates the point
* @property {addCoordinate} addCoordinateTwo - Updates the point
*/
结果:
如果使用 shorthand 语法,则没有可用的参数说明。
如果使用 @callback
语法,将为每个参数提供说明: