Estoy tratando de escribir algunas funciones de ayuda para una biblioteca que facilitará el uso de algunas funciones de Object . Aquí hay un código de muestra de lo que quiero decir:
// ./utc-value.js const makeEnumerable = require('./make-enumerable'); /* Data class to represent UTC values to be handled by an ExtendedDate class * const dt = new Date(); * const xdt = new ExtendedDate(dt); * xdt.utc === new UtcValue(dt); // true * xdt.date === dt.getDate(); // true * xdt.utc.date === dt.getUTCDate(); // true */ class UtcValue { constructor(dt) { this._dt = dt; Object.defineProperty(this, '_dt', { enumerable: false, value: dt } ); } get date() { return this._dt.getUTCDate(); } ... } makeEnumerable(UtcValue.prototype, 'date'); module.exports = UtcValue; Mientras que la función makeEnumerable se ve así:
/** * Maps enumerable=true across all named properties * @param prototype * @param {string} properties */ function makeEnumerable(prototype, ...properties) { const propertyDescriptors = Object.getOwnPropertyDescriptors(prototype); for(const property of properties) { const attributes = propertyDescriptors[property] || {}; attributes.enumerable = true; Object.defineProperty(prototype, property, attributes); } } module.exports = makeEnumerable; ¿Cómo debería verse la firma JSDoc de makeEnumerable para indicarle a un usuario que estoy esperando un prototype , como Object.prototype u obj.constructor.prototype ? También estoy escribiendo el archivo ./make-enumerable.d.ts manualmente (el proyecto es un clásico de JavaScript con planes de pasar a TypeScript en una versión futura), por lo que se agradecería la forma correcta de documentar la firma.
// ./make-enumerable.d.ts export default function makeEnumerable( prototype: typeof Object.prototype, ...properties: string[]): void;