typestar

Tipos condicionales e infer en TypeScript

Tipos que ramifican, y extraen tipos internos.

type Unwrap<T> = T extends Promise<infer U> ? U : T;
type ElementOf<T> = T extends (infer U)[] ? U : never;
type NonNull<T> = T extends null | undefined ? never : T;

type A = Unwrap<Promise<string>>;
type B = ElementOf<number[]>;
type C = NonNull<string | null>;

function unwrap<T>(value: T | Promise<T>): Promise<T> {
  return Promise.resolve(value);
}

Cómo funciona

  1. T extends X ? A : B elige a nivel de tipos.
  2. infer U captura el tipo interno que coincidió.
  3. never elimina un caso de una unión.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
11
Caracteres a escribir
353
Tokens
113
Ritmo de tres estrellas
105 tpm

Al ritmo de tres estrellas de 105 tokens por minuto, este intento toma unos 65 segundos.

Escribe este fragmento

Paso 1 de 3 en Tipos condicionales; paso 1 de 12 en Programación a nivel de tipos.

Siguiente →