Assuming you have the following code inside a ES6 class (documentation):
/**
* @typedef Test~options
* @type {object.<string>}
* @property {array} elements - An array containing elements
* @property {number} length - The array length
*/
/**
* @param {Test~options} opt - Option object
*/
test(opt){
}
Now I would like to document another function, let's name it test2
. This function takes exactly the same options
object, but needs another property parent
.
How to document this without documenting redundant options? Redundant means:
/**
* @typedef Test~options
* @type {object.<string>}
* @property {array} elements - An array containing elements
* @property {number} length - The array length
*/
/**
* @param {Test~options} opt - Option object
*/
test(opt){
}
/**
* @typedef Test~options2
* @type {object.<string>}
* @property {array} elements - An array containing elements
* @property {number} length - The array length
* @property {object} parent - The parent element
*/
/**
* @param {Test~options2} opt - Option object
*/
test2(opt){
}
Try it
/**
* @typedef {object.<string>} Test~options
* @property {array} elements - An array containing elements
* @property {number} length - The array length
*/
/**
* @param {Test~options} opt - Option object
*/
test(opt){
}
/**
* @typedef {Test~options} Test~options2
* @property {object} parent - The parent element
*/
/**
* @param {Test~options2} opt - Option object
*/
test2(opt){
}
I found this solution and this works very fine for me. originally from here
/**
* @typedef {Object} ChildType
* @property {String} childProp
*
* @typedef {Base & ChildType} Child
*/
I don't like half-baked answers without a "full setup", so here is one:
/**
* @typedef {Object} Person
* @property {string} name - The person's name
* @property {number} age - The person's age
*/
/**
* @typedef {Object} WizardProperties
* @property {string[]} magicPowers
* @typedef {Person & WizardProperties} Wizard
*/
/** @type {Wizard} */
export const wizard = {
name: "Harry",
age: 20,
magicPowers: ["brroooomm"]
}
It also works across multiple files, but you have to use the import('./person').Person
style:
/**
* @typedef {Object} Person
* @property {string} name - The person's name
* @property {number} age - The person's age
*/
/**
* @typedef {Object} WizardProperties
* @property {string[]} magicPowers
* @typedef {import('./person').Person & WizardProperties} Wizard
*/
/** @type {Wizard} */
export const wizard = {
name: "Harry",
age: 20,
magicPowers: ["brroooomm", "wheeeeeeeeeeeew"]
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.