es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Tipo genérico de TypeScript con discriminador: acceso en tiempo de ejecución al discriminador.

No creo que esto sea posible, pero pensé en preguntar. Tengo tipos con discriminador, por ejemplo:

type Fish={
  type: "fish"
  canSwim: boolean
}
type Bird={
  type: "bird"
  canFly: boolean
}

Tengo un objeto de estado como este:

const state={
  fish: /* un pez */,
  bird: /* un pájaro */
}

Me gustaría escribir una función:

function getFromState<t>(): T {
  return state[T.type] as T
}

Claramente, una solución alternativa sería pasar el tipo como un parámetro, por ejemplo:

function getFromState<t>(type): T {
  return state[type] as T
}

Pero entonces terminas repitiendo cosas:

typescript
const animal = getFromState<fish>("fish")

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Desafortunadamente, no es posible utilizar la propiedad discriminador de esta manera para extraer la información del tipo en tiempo de ejecución. El compilador de TypeScript solo utilizará la propiedad discriminador para la verificación del tipo durante el tiempo de compilación y no estará disponible en tiempo de ejecución. Por lo tanto, la mejor solución actualmente es pasar el tipo como parámetro.

Comments are closed.