|
| 1 | +[38;2;253;151;31m#[0m[38;2;253;151;31m [0m[38;2;253;151;31mTypescript test[0m |
| 2 | + |
| 3 | +[38;2;255;255;255m```[0m[38;2;190;132;255mtypescript[0m |
| 4 | +[38;2;255;255;255menum Status {[0m |
| 5 | +[38;2;255;255;255m Pending,[0m |
| 6 | +[38;2;255;255;255m InProgress,[0m |
| 7 | +[38;2;255;255;255m Completed,[0m |
| 8 | +[38;2;255;255;255m}[0m |
| 9 | + |
| 10 | +[38;2;255;255;255minterface Task {[0m |
| 11 | +[38;2;255;255;255m id: number;[0m |
| 12 | +[38;2;255;255;255m title: string;[0m |
| 13 | +[38;2;255;255;255m status: Status;[0m |
| 14 | +[38;2;255;255;255m assignee?: string;[0m |
| 15 | +[38;2;255;255;255m}[0m |
| 16 | + |
| 17 | +[38;2;255;255;255mclass TaskManager<T extends Task> {[0m |
| 18 | +[38;2;255;255;255m private tasks: T[] = [];[0m |
| 19 | + |
| 20 | +[38;2;255;255;255m addTask(task: T): void {[0m |
| 21 | +[38;2;255;255;255m this.tasks.push(task);[0m |
| 22 | +[38;2;255;255;255m }[0m |
| 23 | + |
| 24 | +[38;2;255;255;255m getTasksByStatus(status: Status): T[] {[0m |
| 25 | +[38;2;255;255;255m return this.tasks.filter(task => task.status === status);[0m |
| 26 | +[38;2;255;255;255m }[0m |
| 27 | + |
| 28 | +[38;2;255;255;255m async fetchTasks(): Promise<T[]> {[0m |
| 29 | +[38;2;255;255;255m // Simulate async fetch[0m |
| 30 | +[38;2;255;255;255m return new Promise(resolve => setTimeout(() => resolve(this.tasks), 500));[0m |
| 31 | +[38;2;255;255;255m }[0m |
| 32 | +[38;2;255;255;255m}[0m |
| 33 | + |
| 34 | +[38;2;255;255;255m// Type guard[0m |
| 35 | +[38;2;255;255;255mfunction isTask(obj: any): obj is Task {[0m |
| 36 | +[38;2;255;255;255m return typeof obj.id === 'number' && typeof obj.title === 'string';[0m |
| 37 | +[38;2;255;255;255m}[0m |
| 38 | + |
| 39 | +[38;2;255;255;255m// Usage[0m |
| 40 | +[38;2;255;255;255mconst manager = new TaskManager<Task>();[0m |
| 41 | +[38;2;255;255;255mmanager.addTask({ id: 1, title: "Write docs", status: Status.Pending });[0m |
| 42 | +[38;2;255;255;255mmanager.addTask({ id: 2, title: "Review PR", status: Status.InProgress, assignee: "Alice" });[0m |
| 43 | + |
| 44 | +[38;2;255;255;255m(async () => {[0m |
| 45 | +[38;2;255;255;255m const allTasks = await manager.fetchTasks();[0m |
| 46 | +[38;2;255;255;255m allTasks.forEach(task => {[0m |
| 47 | +[38;2;255;255;255m if (isTask(task)) {[0m |
| 48 | +[38;2;255;255;255m console.log(`Task #${task.id}: ${task.title} [${Status[task.status]}]`);[0m |
| 49 | +[38;2;255;255;255m }[0m |
| 50 | +[38;2;255;255;255m });[0m |
| 51 | +[38;2;255;255;255m})();[0m |
| 52 | + |
| 53 | +[38;2;255;255;255m// Type assertion[0m |
| 54 | +[38;2;255;255;255mconst unknownValue: unknown = { id: 3, title: "Test", status: Status.Completed };[0m |
| 55 | +[38;2;255;255;255mconst assertedTask = unknownValue as Task;[0m |
| 56 | +[38;2;255;255;255mconsole.log(assertedTask.title);[0m |
| 57 | +[38;2;255;255;255m```[0m |
0 commit comments