mirror of
https://github.com/sharkdp/bat.git
synced 2025-10-20 10:43:56 +01:00
chore: add a test typescript file
This commit is contained in:
57
tests/syntax-tests/highlighted/Markdown/typescript.md
vendored
Normal file
57
tests/syntax-tests/highlighted/Markdown/typescript.md
vendored
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
[38;2;253;151;31m#[0m[38;2;253;151;31m [0m[38;2;253;151;31mTypescript test[0m
|
||||||
|
|
||||||
|
[38;2;255;255;255m```[0m[38;2;190;132;255mtypescript[0m
|
||||||
|
[38;2;255;255;255menum Status {[0m
|
||||||
|
[38;2;255;255;255m Pending,[0m
|
||||||
|
[38;2;255;255;255m InProgress,[0m
|
||||||
|
[38;2;255;255;255m Completed,[0m
|
||||||
|
[38;2;255;255;255m}[0m
|
||||||
|
|
||||||
|
[38;2;255;255;255minterface Task {[0m
|
||||||
|
[38;2;255;255;255m id: number;[0m
|
||||||
|
[38;2;255;255;255m title: string;[0m
|
||||||
|
[38;2;255;255;255m status: Status;[0m
|
||||||
|
[38;2;255;255;255m assignee?: string;[0m
|
||||||
|
[38;2;255;255;255m}[0m
|
||||||
|
|
||||||
|
[38;2;255;255;255mclass TaskManager<T extends Task> {[0m
|
||||||
|
[38;2;255;255;255m private tasks: T[] = [];[0m
|
||||||
|
|
||||||
|
[38;2;255;255;255m addTask(task: T): void {[0m
|
||||||
|
[38;2;255;255;255m this.tasks.push(task);[0m
|
||||||
|
[38;2;255;255;255m }[0m
|
||||||
|
|
||||||
|
[38;2;255;255;255m getTasksByStatus(status: Status): T[] {[0m
|
||||||
|
[38;2;255;255;255m return this.tasks.filter(task => task.status === status);[0m
|
||||||
|
[38;2;255;255;255m }[0m
|
||||||
|
|
||||||
|
[38;2;255;255;255m async fetchTasks(): Promise<T[]> {[0m
|
||||||
|
[38;2;255;255;255m // Simulate async fetch[0m
|
||||||
|
[38;2;255;255;255m return new Promise(resolve => setTimeout(() => resolve(this.tasks), 500));[0m
|
||||||
|
[38;2;255;255;255m }[0m
|
||||||
|
[38;2;255;255;255m}[0m
|
||||||
|
|
||||||
|
[38;2;255;255;255m// Type guard[0m
|
||||||
|
[38;2;255;255;255mfunction isTask(obj: any): obj is Task {[0m
|
||||||
|
[38;2;255;255;255m return typeof obj.id === 'number' && typeof obj.title === 'string';[0m
|
||||||
|
[38;2;255;255;255m}[0m
|
||||||
|
|
||||||
|
[38;2;255;255;255m// Usage[0m
|
||||||
|
[38;2;255;255;255mconst manager = new TaskManager<Task>();[0m
|
||||||
|
[38;2;255;255;255mmanager.addTask({ id: 1, title: "Write docs", status: Status.Pending });[0m
|
||||||
|
[38;2;255;255;255mmanager.addTask({ id: 2, title: "Review PR", status: Status.InProgress, assignee: "Alice" });[0m
|
||||||
|
|
||||||
|
[38;2;255;255;255m(async () => {[0m
|
||||||
|
[38;2;255;255;255m const allTasks = await manager.fetchTasks();[0m
|
||||||
|
[38;2;255;255;255m allTasks.forEach(task => {[0m
|
||||||
|
[38;2;255;255;255m if (isTask(task)) {[0m
|
||||||
|
[38;2;255;255;255m console.log(`Task #${task.id}: ${task.title} [${Status[task.status]}]`);[0m
|
||||||
|
[38;2;255;255;255m }[0m
|
||||||
|
[38;2;255;255;255m });[0m
|
||||||
|
[38;2;255;255;255m})();[0m
|
||||||
|
|
||||||
|
[38;2;255;255;255m// Type assertion[0m
|
||||||
|
[38;2;255;255;255mconst unknownValue: unknown = { id: 3, title: "Test", status: Status.Completed };[0m
|
||||||
|
[38;2;255;255;255mconst assertedTask = unknownValue as Task;[0m
|
||||||
|
[38;2;255;255;255mconsole.log(assertedTask.title);[0m
|
||||||
|
[38;2;255;255;255m```[0m
|
57
tests/syntax-tests/source/Markdown/typescript.md
vendored
Normal file
57
tests/syntax-tests/source/Markdown/typescript.md
vendored
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
# Typescript test
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
enum Status {
|
||||||
|
Pending,
|
||||||
|
InProgress,
|
||||||
|
Completed,
|
||||||
|
}
|
||||||
|
|
||||||
|
interface Task {
|
||||||
|
id: number;
|
||||||
|
title: string;
|
||||||
|
status: Status;
|
||||||
|
assignee?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
class TaskManager<T extends Task> {
|
||||||
|
private tasks: T[] = [];
|
||||||
|
|
||||||
|
addTask(task: T): void {
|
||||||
|
this.tasks.push(task);
|
||||||
|
}
|
||||||
|
|
||||||
|
getTasksByStatus(status: Status): T[] {
|
||||||
|
return this.tasks.filter(task => task.status === status);
|
||||||
|
}
|
||||||
|
|
||||||
|
async fetchTasks(): Promise<T[]> {
|
||||||
|
// Simulate async fetch
|
||||||
|
return new Promise(resolve => setTimeout(() => resolve(this.tasks), 500));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Type guard
|
||||||
|
function isTask(obj: any): obj is Task {
|
||||||
|
return typeof obj.id === 'number' && typeof obj.title === 'string';
|
||||||
|
}
|
||||||
|
|
||||||
|
// Usage
|
||||||
|
const manager = new TaskManager<Task>();
|
||||||
|
manager.addTask({ id: 1, title: "Write docs", status: Status.Pending });
|
||||||
|
manager.addTask({ id: 2, title: "Review PR", status: Status.InProgress, assignee: "Alice" });
|
||||||
|
|
||||||
|
(async () => {
|
||||||
|
const allTasks = await manager.fetchTasks();
|
||||||
|
allTasks.forEach(task => {
|
||||||
|
if (isTask(task)) {
|
||||||
|
console.log(`Task #${task.id}: ${task.title} [${Status[task.status]}]`);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
||||||
|
// Type assertion
|
||||||
|
const unknownValue: unknown = { id: 3, title: "Test", status: Status.Completed };
|
||||||
|
const assertedTask = unknownValue as Task;
|
||||||
|
console.log(assertedTask.title);
|
||||||
|
```
|
Reference in New Issue
Block a user