Búsqueda de sitios web

javascript - ¿Cómo comprobar si el tipo es undefined en los tipos condicionales de Typescript?


Actualmente tengo este tipo:

type ReturnType<T, E> = [T, E]

Estoy intentando hacer que este tipo sea "más inteligente" siguiendo estas reglas:

  • Si T es undefined, entonces el tipo sería [undefined, E]
  • Si E es undefined, entonces el tipo sería [T]
  • T y E no pueden ambos ser undefined

Estoy intentando aplicar estas reglas usando los Tipos Condicionales de Typescript.
¿Es siquiera posible implementar esto?

Esto es lo que tengo hasta ahora:

type ReturnType<T, E> = 
    T extends undefined 
    ? E extends undefined ? never : [undefined, E]
    : E extends undefined ? [T] : never

Respuesta #1

Lo que parece que te está faltando es que puedes hacer pruebas tanto para T como para E al mismo tiempo con:

[T, E] extends [TypeA, TypeB] ? ... : ...

Poniendo eso en práctica puedes hacer:

type MyReturnType<T, E> = 
    [T, E] extends [undefined, undefined] ? never
    : T extends undefined ? [undefined, E]
    : E extends undefined ? [T]
    : [T, E]

type A = MyReturnType<undefined, undefined> // never
type B = MyReturnType<string, undefined> // [string]
type C = MyReturnType<undefined, number> // [undefined, number]
type D = MyReturnType<boolean, string> // [boolean, string]

Parque infantil

Artículos relacionados