typestar

Tipos mapeados con remapeo de claves en TypeScript

Construir un tipo a partir de otro, renombrando las claves en el camino.

interface Settings {
  theme: string;
  editorMode: boolean;
  timeLimit: number;
}

type Getters<T> = {
  [K in keyof T as `get${Capitalize<string & K>}`]: () => T[K];
};

type OnlyBooleans<T> = {
  [K in keyof T as T[K] extends boolean ? K : never]: T[K];
};

type Nullable<T> = { [K in keyof T]: T[K] | null };

type SettingsGetters = Getters<Settings>;
type Flags = OnlyBooleans<Settings>;

const getters: SettingsGetters = {
  getTheme: () => "dracula",
  getEditorMode: () => true,
  getTimeLimit: () => 60,
};
const flags: Flags = { editorMode: false };
const nullable: Nullable<Settings> = { theme: null, editorMode: true,
  timeLimit: 30 };
console.log(getters.getTheme(), flags.editorMode, nullable.theme);

Cómo funciona

  1. as en un tipo mapeado reescribe cada clave.
  2. Devolver never desde la cláusula as descarta la clave.
  3. Los literales de plantilla construyen los nombres nuevos.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
28
Caracteres a escribir
698
Tokens
203
Ritmo de tres estrellas
110 tpm

Al ritmo de tres estrellas de 110 tokens por minuto, este intento toma unos 111 segundos.

Escribe este fragmento

Paso 2 de 3 en Tipos mapeados; paso 5 de 12 en Programación a nivel de tipos.

← Anterior Siguiente →