Ejecuta cada solución en un entorno aislado. Los ejercicios simples validan la salida y los complejos usan pruebas educativas.
01
Extraer el retorno
Difícil
Define Retorno<T> con infer para obtener el tipo devuelto por una función.
Enter ejecuta. Shift+Enter inserta una línea. Ctrl/Cmd+Enter también ejecuta todo el editor.
TypeScript se carga al ejecutar
Pendiente
Consola / output
La salida aparecerá aquí.
Comprueba con TypeScript 5.9.3 en un único Worker lazy y ejecuta sólo el JavaScript emitido dentro del sandbox existente. No ofrece Language Service, paquetes npm ni imports de red; los módulos educativos usan un VFS acotado.
02
Distribuir alternativas
Difícil
Define EnArray<T> distributivo para que string | number produzca string[] | number[].
Enter ejecuta. Shift+Enter inserta una línea. Ctrl/Cmd+Enter también ejecuta todo el editor.
TypeScript se carga al ejecutar
Pendiente
Consola / output
La salida aparecerá aquí.
Comprueba con TypeScript 5.9.3 en un único Worker lazy y ejecuta sólo el JavaScript emitido dentro del sandbox existente. No ofrece Language Service, paquetes npm ni imports de red; los módulos educativos usan un VFS acotado.
03
Desenvolver Promises
Difícil
Define Desenvolver<T> recursivo para extraer Promises anidadas.
Enter ejecuta. Shift+Enter inserta una línea. Ctrl/Cmd+Enter también ejecuta todo el editor.
TypeScript se carga al ejecutar
Pendiente
Consola / output
La salida aparecerá aquí.
Comprueba con TypeScript 5.9.3 en un único Worker lazy y ejecuta sólo el JavaScript emitido dentro del sandbox existente. No ofrece Language Service, paquetes npm ni imports de red; los módulos educativos usan un VFS acotado.
04
Generar nombres de eventos
Difícil
Define Eventos<T> que remapee cada clave string K a onK y conserve un callback con T[K].
Enter ejecuta. Shift+Enter inserta una línea. Ctrl/Cmd+Enter también ejecuta todo el editor.
TypeScript se carga al ejecutar
Pendiente
Consola / output
La salida aparecerá aquí.
Comprueba con TypeScript 5.9.3 en un único Worker lazy y ejecuta sólo el JavaScript emitido dentro del sandbox existente. No ofrece Language Service, paquetes npm ni imports de red; los módulos educativos usan un VFS acotado.
05
Separar una ruta literal
Difícil
Define Partes<T> para separar 'usuarios/42' en la tupla ['usuarios', '42'].
Enter ejecuta. Shift+Enter inserta una línea. Ctrl/Cmd+Enter también ejecuta todo el editor.
TypeScript se carga al ejecutar
Pendiente
Consola / output
La salida aparecerá aquí.
Comprueba con TypeScript 5.9.3 en un único Worker lazy y ejecuta sólo el JavaScript emitido dentro del sandbox existente. No ofrece Language Service, paquetes npm ni imports de red; los módulos educativos usan un VFS acotado.
06
Indexar por una clave segura
Difícil
Implementa indexar<T, K extends keyof T>(valores, clave): Map<T[K], T> sin perder la relación de la clave.
Enter ejecuta. Shift+Enter inserta una línea. Ctrl/Cmd+Enter también ejecuta todo el editor.
TypeScript se carga al ejecutar
Pendiente
Consola / output
La salida aparecerá aquí.
Comprueba con TypeScript 5.9.3 en un único Worker lazy y ejecuta sólo el JavaScript emitido dentro del sandbox existente. No ofrece Language Service, paquetes npm ni imports de red; los módulos educativos usan un VFS acotado.
07
Separar productores y consumidores
Difícil
Declara Productor<out T> como () => T y Consumidor<in T> como (valor: T) => void.
Enter ejecuta. Shift+Enter inserta una línea. Ctrl/Cmd+Enter también ejecuta todo el editor.
TypeScript se carga al ejecutar
Pendiente
Consola / output
La salida aparecerá aquí.
Comprueba con TypeScript 5.9.3 en un único Worker lazy y ejecuta sólo el JavaScript emitido dentro del sandbox existente. No ofrece Language Service, paquetes npm ni imports de red; los módulos educativos usan un VFS acotado.
08
Inferir una tupla literal
Difícil
Implementa conservar<const T extends readonly unknown[]>(valor: T): T.
Enter ejecuta. Shift+Enter inserta una línea. Ctrl/Cmd+Enter también ejecuta todo el editor.
TypeScript se carga al ejecutar
Pendiente
Consola / output
La salida aparecerá aquí.
Comprueba con TypeScript 5.9.3 en un único Worker lazy y ejecuta sólo el JavaScript emitido dentro del sandbox existente. No ofrece Language Service, paquetes npm ni imports de red; los módulos educativos usan un VFS acotado.
09
Identificador validado
Difícil
Declara UsuarioId como string con marca unique symbol e implementa usuarioId(texto) que rechace cadenas vacías y devuelva la marca.
Enter ejecuta. Shift+Enter inserta una línea. Ctrl/Cmd+Enter también ejecuta todo el editor.
TypeScript se carga al ejecutar
Pendiente
Consola / output
La salida aparecerá aquí.
Comprueba con TypeScript 5.9.3 en un único Worker lazy y ejecuta sólo el JavaScript emitido dentro del sandbox existente. No ofrece Language Service, paquetes npm ni imports de red; los módulos educativos usan un VFS acotado.
10
Leer una frontera unknown
Difícil
Implementa textoSeguro(valor: unknown): string con typeof; evita any y assertions.
Enter ejecuta. Shift+Enter inserta una línea. Ctrl/Cmd+Enter también ejecuta todo el editor.
TypeScript se carga al ejecutar
Pendiente
Consola / output
La salida aparecerá aquí.
Comprueba con TypeScript 5.9.3 en un único Worker lazy y ejecuta sólo el JavaScript emitido dentro del sandbox existente. No ofrece Language Service, paquetes npm ni imports de red; los módulos educativos usan un VFS acotado.
11
Recorrer un árbol tipado
Difícil
Declara Nodo<T> con valor e hijos readonly; implementa contar para devolver la cantidad total de nodos.
Enter ejecuta. Shift+Enter inserta una línea. Ctrl/Cmd+Enter también ejecuta todo el editor.
TypeScript se carga al ejecutar
Pendiente
Consola / output
La salida aparecerá aquí.
Comprueba con TypeScript 5.9.3 en un único Worker lazy y ejecuta sólo el JavaScript emitido dentro del sandbox existente. No ofrece Language Service, paquetes npm ni imports de red; los módulos educativos usan un VFS acotado.
12
Ampliar un módulo en memoria
Difícil
Importa Observable desde './observable' y amplía su interface con map<U> sin crear un módulo de red.
Enter ejecuta. Shift+Enter inserta una línea. Ctrl/Cmd+Enter también ejecuta todo el editor.
TypeScript se carga al ejecutar
Pendiente
Consola / output
La salida aparecerá aquí.
Comprueba con TypeScript 5.9.3 en un único Worker lazy y ejecuta sólo el JavaScript emitido dentro del sandbox existente. No ofrece Language Service, paquetes npm ni imports de red; los módulos educativos usan un VFS acotado.
13
Decorator moderno de método
Difícil
Implementa registrar para un método moderno: recibe el método y el subconjunto name/private/static de ClassMethodDecoratorContext, y devuelve un wrapper que delega.
Enter ejecuta. Shift+Enter inserta una línea. Ctrl/Cmd+Enter también ejecuta todo el editor.
TypeScript se carga al ejecutar
Pendiente
Consola / output
La salida aparecerá aquí.
Comprueba con TypeScript 5.9.3 en un único Worker lazy y ejecuta sólo el JavaScript emitido dentro del sandbox existente. No ofrece Language Service, paquetes npm ni imports de red; los módulos educativos usan un VFS acotado.
14
Fijar una API con tests de tipos
Difícil
Implementa envolver<T>(valor: T): { valor: T } y añade una prueba negativa con @ts-expect-error para envolver<string>(3).
Enter ejecuta. Shift+Enter inserta una línea. Ctrl/Cmd+Enter también ejecuta todo el editor.
TypeScript se carga al ejecutar
Pendiente
Consola / output
La salida aparecerá aquí.
Comprueba con TypeScript 5.9.3 en un único Worker lazy y ejecuta sólo el JavaScript emitido dentro del sandbox existente. No ofrece Language Service, paquetes npm ni imports de red; los módulos educativos usan un VFS acotado.