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

300
Views
¿Cuál es una buena manera de encontrar a qué unión pertenece la variable?

He estado tratando de crear una función donde el parámetro de la función es una unión hecha de otras dos uniones. Lo quiero para que, dependiendo de la cadena pasada al parámetro, se active una función diferente en consecuencia. Algo como esto:

 type Type1 = "a" | "b" | "c"; type Type2 = "x" | "y" | "z"; function doSomething(param: Type1 | Type2) { // if param is a part of the "Type1" union functionForTypeOne(); } doSomething("z");

Busqué a través de Internet y los documentos y no pude encontrar una manera de hacer esta verificación de tipo de tiempo de ejecución. Encontré algunas "soluciones" para la verificación de tipos, pero todas fueron escritas para tipos de objetos, no para cadenas y uniones.

En javascript básico, podría crear una matriz const y verificar si la cadena se encuentra dentro de la matriz, así:

 const type1 = ["a", "b", "c"]; const type2 = ["x", "y", "z"]; function doSomething(param) { if (type1.includes(param)) functionForTypeOne(); }

Hacer esto en TypeScript es una especie de solución, pero como necesito crear uniones a partir de estas constantes, se siente muy ineficiente y no me permite usar las funciones de verificación de tipos del lenguaje. Tenía curiosidad por saber si alguien tiene una solución para esto que posiblemente haya pasado por alto, o si esta es la única forma de solucionar mi problema.

about 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Puede construir las uniones a partir de sus tuplas casi automáticamente y usar un predicado de protección de tipos para recuperar la seguridad de tipos:

 const type1 = ["a", "b", "c"] as const; // Assert as const to infer tuple instead of array string[] const type2 = ["x", "y", "z"] as const; // Automatically get union type from tuple values type Type1 = typeof type1[number]; // ^? "a" | "b" | "c" type Type2 = typeof type2[number]; // ^? "x" | "y" | "z" // Type guard predicate function isIn<T extends readonly string[]>(val: string, arr: T): val is T[number] { return arr.includes(val); } function doSomething(param: Type1 | Type2) { param //^? "a" | "b" | "c" | "x" | "y" | "z" if (isIn(param, type1)) { param //^? "a" | "b" | "c" //functionForTypeOne(); } }

Enlace del patio de recreo

about 4 years ago · Santiago Trujillo 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!