تمرين إعادة البناء
Command Router
أعد كتابة موجّه أوامر TypeScript يقرأ argv ويفرّع حسب الأمر.
typescript
~15 دقيقة
متوسط
أعد بناء الكود
Rebuild
هذا هو الكود. اكتبه بنفسك.
الكود المرجعي
declare const process: {
argv: string[];
exit(code?: number): never;
};
type CommandName = "greet" | "sum" | "help";
interface Command {
name: CommandName;
run(args: string[]): string;
}
function parseNumber(value: string): number {
const parsed = Number(value);
if (!Number.isFinite(parsed)) {
throw new Error(`Invalid number: ${value}`);
}
return parsed;
}
const commands: Command[] = [
{
name: "greet",
run: (args) => `Hello, ${args[0] ?? "friend"}!`,
},
{
name: "sum",
run: (args) => String(args.map(parseNumber).reduce((total, value) => total + value, 0)),
},
{
name: "help",
run: () => "Commands: greet <name>, sum <numbers>",
},
];
function route(argv: string[]): string {
const [rawName = "help", ...args] = argv;
const command = commands.find((candidate) => candidate.name === rawName);
if (!command) {
throw new Error(`Unknown command: ${rawName}`);
}
return command.run(args);
}
try {
console.log(route(process.argv.slice(2)));
} catch (error: unknown) {
console.error(error instanceof Error ? error.message : "Unknown error");
process.exit(1);
}اكتب هنا