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

261
Vistas
Introspección de tipos en tiempo de ejecución con TypeScript

Tengo dos tipos de funciones de filtro: NodeFilter y EdgeFilter por ejemplo type NodeFilter = (node: Node) => boolean

Me gustaría escribir una función Graph::filter(filters: NodeFilter | EdgeFilter): Graph que aplica los filtros a los nodos y bordes del Graph, para crear un nuevo Graph.

Así que en el filtro tengo que hacer

 if (filter is type NodeFilter) nodes = nodes.filter(filter) else if (filter is type EdgeFilter) edges = edges.filter(filter)

He visto recomendaciones de agregar una propiedad de "tipo" a las instancias. p.ej

 function myNodeFilter(node: Node): boolean { // do the filtering and return boolean } myNodeFilter.type = "NodeFilter";

¿Hay una mejor manera? ¿Tal vez definiendo una instancia de clase invocable?

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

0

Puede usar uniones descriminadas para esto con una pizca de firma de llamada.

 /** * Kindly ignore the naming, * it was conflicting with the DOM Node and NodeFilter function (since I tested this in typescript playground) **/ type NodeF = {}; type Edge = {} type NodeFilterr = { (node: NodeF): boolean, type: "NodeFilter" } type EdgeFilter = { (edge: Edge): boolean, type: "EdgeFilter" } function f(filter: NodeFilterr | EdgeFilter ) { if ( filter.type === "NodeFilter" ) { // do stuff } if ( filter.type === "EdgeFilter" ) { // do stuff } }
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