Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

373
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!