在 TypeScript 中函数是一等公民既可以作为参数传递也可以作为返回值返回。TypeScript 为函数提供了完整的类型系统支持包括参数类型、返回值类型、可选参数、默认参数、剩余参数等。函数的基本类型声明函数声明// 完整的函数声明 function add(a: number, b: number): number { return a b; } // 没有返回值void function logMessage(message: string): void { console.log(message); } // 永远不会返回never function throwError(message: string): never { throw new Error(message); }函数表达式// 变量指向函数 const add function(a: number, b: number): number { return a b; }; // 箭头函数 const multiply (a: number, b: number): number a * b; // 箭头函数多行 const divide (a: number, b: number): number { if (b 0) throw new Error(Cannot divide by zero); return a / b; };函数类型注解// 定义函数类型 type MathFunction (a: number, b: number) number; // 使用函数类型 const add: MathFunction (a, b) a b; const subtract: MathFunction (a, b) a - b; // 接口定义函数类型 interface GreetFunction { (name: string, title?: string): string; } const greet: GreetFunction (name, title) { return title ? Hello ${title} ${name} : Hello ${name}; };参数类型必需参数// 所有参数都是必需的 function createUser(name: string, age: number, email: string): void { console.log(${name} (${age}) - ${email}); } // ✅ 正确 createUser(Alice, 25, alicetest.com); // ❌ 错误缺少参数 // createUser(Alice, 25); // 缺少 email // createUser(Alice, 25, alicetest.com, extra); // 参数过多可选参数// 可选参数? function greet(name: string, title?: string): string { if (title) { return Hello ${title} ${name}; } return Hello ${name}; } console.log(greet(Alice)); // Hello Alice console.log(greet(Alice, Ms.)); // Hello Ms. Alice // 多个可选参数 function createPerson( name: string, age?: number, email?: string ): void { console.log(Name: ${name}); if (age) console.log(Age: ${age}); if (email) console.log(Email: ${email}); }默认参数// 默认参数 function greet(name: string, title: string Mr./Ms.): string { return Hello ${title} ${name}; } console.log(greet(Alice)); // Hello Mr./Ms. Alice console.log(greet(Bob, Dr.)); // Hello Dr. Bob // 默认参数 可选参数 function createConfig( url: string, method: string GET, timeout?: number ): { url: string; method: string; timeout: number } { return { url, method, timeout: timeout ?? 5000 // 默认 5000 }; } console.log(createConfig(/api)); // { url: /api, method: GET, timeout: 5000 }剩余参数// 剩余参数必须是最后一个参数 function sum(...numbers: number[]): number { return numbers.reduce((total, num) total num, 0); } console.log(sum(1, 2, 3)); // 6 console.log(sum(1, 2, 3, 4, 5)); // 15 // 剩余参数 其他参数 function logMessages(prefix: string, ...messages: string[]): void { messages.forEach(msg console.log(${prefix}: ${msg})); } logMessages(LOG, User login, Data loaded, Request sent); // LOG: User login // LOG: Data loaded // LOG: Request sent // 元组类型的剩余参数 type StringNumber [string, number]; function processPairs(...pairs: StringNumber[]): void { pairs.forEach(([str, num]) { console.log(${str}: ${num}); }); } processPairs([a, 1], [b, 2], [c, 3]);返回值类型显式返回值类型// 基础类型 function getMessage(): string { return Hello; } function getAge(): number { return 25; } function isActive(): boolean { return true; } // 对象类型 function getUser(): { id: number; name: string } { return { id: 1, name: Alice }; } // 数组类型 function getScores(): number[] { return [95, 87, 92]; } // 联合类型 function getValue(): string | number { return Math.random() 0.5 ? hello : 42; } // 元组类型 function getCoordinates(): [number, number] { return [10, 20]; }推断返回值类型// TypeScript 自动推断返回类型 function add(a: number, b: number) { return a b; // 推断为 number } function getMessage() { return Hello; // 推断为 string } function getConfig() { return { url: /api, timeout: 5000 }; // 推断为 { url: string; timeout: number } } // 多分支推断 function getData(flag: boolean) { if (flag) { return string; // string } return 42; // number // 推断为 string | number }void 类型// 没有 return 语句 function logMessage(message: string): void { console.log(message); // 隐式返回 undefined } // return undefined function returnUndefined(): void { return undefined; } // 回调函数 function forEachT(items: T[], callback: (item: T) void): void { items.forEach(callback); } forEach([1, 2, 3], (num) { console.log(num); // 可以返回任何值但会被忽略 });never 类型// 抛出异常 function throwError(message: string): never { throw new Error(message); } // 无限循环 function infiniteLoop(): never { while (true) { // 永远不结束 } } // 死递归 function recursion(): never { return recursion(); } // 穷尽性检查 type Status pending | success | error; function handleStatus(status: Status): string { switch (status) { case pending: return 加载中; case success: return 成功; case error: return 失败; default: // 如果遗漏了某个 case这里会报错 const exhaustiveCheck: never status; return exhaustiveCheck; } }