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

484
Vistas
Cómo obtener el valor mínimo/máximo de Enum en TypeScript

Tengo una enumeración constante en TypeScript, algo como a continuación:

 const enum ControlId { ZoomIn = 600, ZoomOut, Close, Open, .... }

Dado un número, quiero saber si está dentro del rango de ControlId, que es [600, ?], para poder saber si entra en la categoría de ControlId o no. Me pregunto si hay una manera de hacer eso. Gracias.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Creo que está diciendo que tiene un valor de tiempo de ejecución y desea saber si es un miembro válido de ControlId (ha dicho que desea una "verificación de rango", pero las enumeraciones numéricas no son necesariamente contiguas).

Una const enum no existe en tiempo de ejecución, por lo que no puede escribir código de tiempo de ejecución para validar un número y ver si es un miembro válido de una const enum .

Puedes hacerlo si la enum no es const :

 enum ControlId { ZoomIn = 600, ZoomOut, Close, Open, // .... } function assertIsControlId(value: number): asserts value is ControlId { if (!(value in ControlId)) { throw new Error(`Invalid ControlId value ${value}`); } }

Allí lo he hecho como una función de aserción de tipos, pero en su lugar podría ser una función de protección de tipos, o simplemente una expresión en línea. Básicamente, si el valor es un número y el valor (cuando se convierte en cadena, implícitamente por el operador in ) es un nombre de propiedad válido para ControlId , es un miembro válido de ControlId .

Si realmente quiere decir que desea el mínimo / máximo, aunque no se garantiza que los valores de enumeración sean contiguos, puede hacerlo así:

 function getMinMaxOfEnum(e: object) { const values = Object.keys(e).map(k => k === "" ? NaN : +k).filter(k => !isNaN(k)).sort((k1, k2) => k1 - k2); return [values[0], values[values.length - 1]]; }

(Probablemente haya un mejor tipo para e que object . Y en entornos modernos, values[values.length - 1] podría ser values.at(-1) .

Eso obtiene todas las claves del objeto que pasa, las convierte en números si es posible, elimina las que no se convirtieron correctamente (por lo que ahora tenemos una matriz de valores de enumeración), ordena la matriz resultante y devuelve la primera y últimos elementos de la matriz.

Alternativamente, use Math.min y Math.max en lugar de ordenar:

 function getMinMaxOfEnum(e: object) { const values = Object.keys(e).map(k => k === "" ? NaN : +k).filter(k => !isNaN(k)); return [Math.min(...values), Math.max(...values)]; }

Enlace del patio de recreo

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