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
asen un tipo mapeado reescribe cada clave.- Devolver
neverdesde la cláusulaasdescarta la clave. - Los literales de plantilla construyen los nombres nuevos.
Palabras clave y builtins usados aquí
FlagsNullableSettingsGettersasbooleanconstextendsfalseinterfacenevernullnumberstringtruetype
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.
Paso 2 de 3 en Tipos mapeados; paso 5 de 12 en Programación a nivel de tipos.