Tengo un objeto que es básicamente un mapa constante de pares clave-valor:
const mailTemplates = { "email-verification": "some-api-key", "welcome": "another-key", "password-reset": "lorem-ipsum" };Tengo otra función que se ve así:
const sendMail = (type, data) => { const templateId = mailTemplates[type]; // rest of function logic } Quiero que el primer argumento ( type ) sea JSDoc-ed para que solo muestre las claves posibles del mapa de arriba (en sentido inteligente).
/** * @param {"email-verification" | "welcome" | "password-reset"} type */Pero a medida que crece el código, se agregarán más pares clave-valor y serán dos cosas que administrar. Estoy buscando una solución más dinámica .
/** * @param {Object.keys(mailTemplates).join(" | ")} type */ /** * @typedef {string} keys */ const TEMPLATE_KEYS = Object.keys(mailTemplates).join(" | ") /** * @param {keys} type */enums según esta respuesta , pero no hubo intellisense.Es más probable que se trate de un caso de optimización prematura (de mantenibilidad), pero aún me gustaría saberlo para referencias futuras.
Sí, la join(" | ") probablemente no lo corte y requiera algunas transformaciones más, pero primero quería verificar si las expresiones JS funcionan dentro de JSDoc.