Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

374
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda