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

164
Vistas
Usando una enumeración y un mapa de carga útil para obtener un segundo argumento implícito de indefinido

Actualmente estoy escribiendo una función que toma dos argumentos. El primero es la clave de una enumeración, y el segundo depende del primer argumento.

Algunas de las claves no requieren un segundo argumento, por lo que cuando asigno indefinido en el mapa de carga útil, la función requiere explícitamente pasar indefinido.

¿Hay alguna manera de pasar la primera clave y no pasar un segundo argumento, mientras cumplo con los requisitos de tipo?

Código:

 export enum MyKey { BleepBloop = 'BleepBloop', BeepBoop = 'BeepBoop', BingBong = 'BingBong', } export type SubstitutionsMap = { [MyKey.BleepBloop]: [string, string]; [MyKey.BeepBoop]: [string, string]; [MyKey.BingBong]: undefined; }; export const getFoo = <K extends MyKey>(key: K, substitutions: SubstitutionsMap[K]): string => { // Handle private logic return '' }; getFoo(MyKey.BingBong) // <--- Error is here

Error:

 (enum member) MyKey.BingBong = "BingBong" Expected 2 arguments, but got 1.ts(2554) index.ts(13, 49): An argument for 'substitutions' was not provided.

Este error desaparece cuando paso explícitamente indefinido, pero me gustaría no tener que pasar un segundo argumento si simplemente no está definido.

Esto corrige mi error:

 getFoo(MyKey.BingBong, undefined)
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Puede crear sobrecargas de funciones para getFoo que coincidan con los tipos requeridos.

Algo como a continuación:

 function getFoo(key: MyKey.BingBong): string; function getFoo<K extends MyKey.BeepBoop | MyKey.BleepBloop>( key: K, substitutions: SubstitutionsMap[K] ): string; function getFoo(key: MyKey, substitutions?: SubstitutionsMap): string { if (key === MyKey.BingBong) { // code in which I don't need substitutions } if (substitutions) { // code in which I do need to access substitutions } return ''; } getFoo(MyKey.BleepBloop); //error! getFoo(MyKey.BleepBloop, ['asd', 'qwe']); //fine getFoo(MyKey.BeepBoop); //error! getFoo(MyKey.BeepBoop, ['asd', 'qwe']); //fine getFoo(MyKey.BingBong); //fine getFoo(MyKey.BingBong, ['asd', 'qwe']); //error!

Esto hará que cuando el primer argumento sea MyKey.BingBong , no le permitirá pasar un segundo argumento, pero si es otro miembro de MyKey , requerirá que pase un segundo argumento.

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