diff --git a/2024/21-callbacks/solution.ts b/2024/21-callbacks/solution.ts
new file mode 100644
index 0000000..dbe3040
--- /dev/null
+++ b/2024/21-callbacks/solution.ts
@@ -0,0 +1,53 @@
+/* eslint-disable no-console */
+
+// Definir el tipo para el callback
+type Callback = (result: number) => void;
+
+function processNumber(number: number, callback: Callback): void {
+ const result = number * number;
+ callback(result);
+}
+
+function printResult(result: number): void {
+ console.log('El resultado es:', result);
+}
+
+// Usando la función con el callback
+processNumber(5, printResult);
+
+// DIFICULTAD
+type OrderCallback = (dish: string) => void;
+
+function processOrder(dish: string, onConfirmation: OrderCallback, onReady: OrderCallback, onDelivered: OrderCallback): void {
+ // Imprimir confirmación cuando empiece el procesamiento
+ onConfirmation(dish);
+
+ // Simular un tiempo aleatorio entre 1 a 10 segundos para cada etapa del proceso
+ const randomDelay = (): number => Math.floor(Math.random() * 10000) + 1000;
+
+ // Simular la confirmación del pedido
+ setTimeout(() => {
+ onReady(dish); // Notificar que el plato está listo
+
+ // Simular la entrega del pedido
+ setTimeout(() => {
+ onDelivered(dish); // Notificar que el pedido ha sido entregado
+ }, randomDelay());
+ }, randomDelay());
+}
+
+// Callbacks para manejar las etapas del pedido
+function confirmOrder(dish: string): void {
+ console.log(`Pedido confirmado para: ${dish}`);
+}
+
+function dishReady(dish: string): void {
+ console.log(`El plato ${dish} está listo.`);
+}
+
+function orderDelivered(dish: string): void {
+ console.log(`El plato ${dish} ha sido entregado.`);
+}
+
+// Usando la función con los callbacks
+processOrder('Pizza Margherita', confirmOrder, dishReady, orderDelivered);
diff --git a/README.md b/README.md
index b75d6db..d56d35d 100644
--- a/README.md
+++ b/README.md
@@ -70,7 +70,7 @@ npm run test 'year'/'folder-name'/solution.test.js
| 18 | [Conjuntos](https://retosdeprogramacion.com/roadmap/) | 🟢 | [](./2024/18-conjuntos/index.js)
[](./2024/17-iteraciones/solution.ts) |
| 19 | [Enumeraciones](https://retosdeprogramacion.com/roadmap/) | 🟡 | [](./2024/19-enumeraciones/index.js)
[](./2024/19-enumeraciones/solution.ts) |
| 20 | [Peticiones HTTP](https://retosdeprogramacion.com/roadmap/) | 🔴 | [](./2024/20-peticiones-http/index.js)
[](./2024/20-peticiones-http/solution.ts) |
-| 21 | [Callbacks](https://retosdeprogramacion.com/roadmap/) | 🟡 | [](./2024/21-callbacks/index.js) |
+| 21 | [Callbacks](https://retosdeprogramacion.com/roadmap/) | 🟡 | [](./2024/21-callbacks/index.js)
[](./2024/21-callbacks/solution.ts) |
| 22 | [Funciones de Orden Superior](https://retosdeprogramacion.com/roadmap/) | 🔴 | [](./2024/22-funciones-de-orden-superior/index.js) |
| 23 | [Patrones de Diseño: Singleton](https://retosdeprogramacion.com/roadmap/) | 🟡 | [](./2024/23-singleton/index.js) |
| 24 | [Patrones de Diseño: Decoradores](https://retosdeprogramacion.com/roadmap/) | 🟢 | [](./2024/24-decoradores/index.js) |