TypeScriptLección 16 de 16
Miniproyecto: un gestor de tareas tipado
La última lección lo junta todo: una interfaz, una unión de literales, tipos utilitarios y una clase con estado privado. El esqueleto está listo y quedan tres métodos por escribir.
Lo esencial
- Priority es una unión de literales, no un enum.
- readonly id no puede cambiar una vez creada la tarea.
- NewTask = Omit<Task, "id" | "done">: esos campos los rellena el gestor.
- Record<Priority, number> fija el orden y no deja olvidar ninguna prioridad.
- private tasks: desde fuera, la lista solo cambia a través de los métodos.
Ejemplo
type NoteStatus = "todo" | "done"; interface Note { readonly id: number; text: string; status: NoteStatus;} class NoteBook { private notes: Note[] = []; add(text: string): Note { const note: Note = { id: this.notes.length + 1, text, status: "todo" }; this.notes.push(note); return note; } finish(id: number): void { const note = this.notes.find((item) => item.id === id); if (note) note.status = "done"; } count(status: NoteStatus): number { return this.notes.filter((note) => note.status === status).length; }} const book = new NoteBook();book.add("Buy milk");book.add("Call Sam");book.finish(1);console.log(`todo: ${book.count("todo")}, done: ${book.count("done")}`);El ejemplo es una versión reducida del proyecto: notas con estado, un array privado y un método para contar. El ejercicio añade el orden por prioridad y las estadísticas.
Tarea
Cómo usar el editor⌘ Enter o Ctrl Enter ejecuta el código, ⇧ ⌘ Enter comprueba la tarea.Tab y Mayús Tab sangran la línea o la selección; Esc y luego Tab sale del editor.La comprobación compara lo que imprimió el programa con la tarea; los espacios al final de línea no cuentan.Tras dos comprobaciones fallidas puedes ver la solución. Tu código se guarda en este navegador.Completa complete, pending y stats. Salida: «Complete #2: true», «Complete #9: false», luego las tareas abiertas por prioridad —«[high] Review PR», «[medium] Write README», «[low] Update icons»— y «Done: 1, open: 3».
Salida
Aquí aparecerá lo que imprima el programa.