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

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

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 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