Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

381
Vistas
¿Cómo escribir un JSDoc para un objeto con diferentes tipos de claves?

La API JSDoc dice que puede documentar objetos así:

 {Object.<string, number>}

y documento de tipo múltiple:

 {(number|boolean)}

Pero si trato de especificar un objeto que podría tener cadenas O números como clave, no funciona. VSCode/JSDoc solo informa el tipo como 'cualquiera'.

VSCode no entiende:

 /** * Object with string or number for keys * @param {Object.<(string|number), any>} Container */

También probé esto en @typedef , o definí la clave en su propio @typedef sin ningún efecto.

Debido a que estoy usando & para obtener una intersection de tipos (como {Object.<string, any> & {'foo': number}} no quiero tener que usar el booleano o decir:

 /** * Object with string or number for keys * @param {(Object.<string, any>|Object.<number, any>) & {'foo': number}} Container */

El tipo documentado termina pareciéndose a algo como:

 type Container = ({ [x: string]: any; } & { 'foo': number; }) | ({ [x: number]: any; } & { 'foo': number; })

Lo cual es innecesariamente detallado.

¿Hay alguna manera de documentar esto con un resultado más sucinto?

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

En JavaScript, las claves de objeto son siempre cadenas (o, en el caso de los números, forzadas a cadenas), por lo que podría complicar las cosas innecesariamente. Consulte la especificación de ECMAScript en objetos :

Las propiedades se identifican mediante valores clave. Un valor de clave de propiedad es un valor de cadena ECMAScript o un valor de símbolo. Todos los valores de Cadena y Símbolo, incluida la Cadena vacía, son válidos como claves de propiedad. Un nombre de propiedad es una clave de propiedad que es un valor de cadena.

Un índice entero es una clave de propiedad con valor de cadena que es una cadena numérica canónica

Dicho esto, esta parece ser la solución más sencilla:

 // Combined /** * @param {Object.<string, any> & {foo: number}} Container */ // Split/reusable /** * @typedef {Object.<string, any>} GenericObject * @param {GenericObject & {foo: number}} Container */

Ambos resultados anteriores dan como resultado este tipo/documentación:

 Container: { [x: string]: any; } & { foo: number; }

Declarar Object.<string, any> me parece un poco redundante, ya que las claves de objeto son inherentemente string y los valores son inherentemente any , por lo que declararlo de esta manera no proporciona mucho valor a un desarrollador.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda