第3章:函数
3.1 函数定义与类型签名
基本语法
TypeScript 中的函数定义与 JavaScript 类似,但增加了类型注解的支持。以下是两种定义方式:
// 具名函数
function greet(name: string): string {
return `Hello, ${name}!`;
}
// 函数表达式
const greet = function(name: string): string {
return `Hello, ${name}!`;
};
类型签名
函数的类型签名由参数类型和返回值类型组成,格式为:(param1: type1, param2: type2) => returnType
// 显式声明函数类型
let greetFn: (name: string) => string;
// 实现需匹配签名
greetFn = function(name: string) {
return `Hello, ${name}`;
};
返回值类型
- 可通过
: type显式声明返回值类型 - 若未声明,TypeScript 会进行类型推断
- 无返回值时使用
void类型:
function log(message: string): void {
console.log(message);
}
特殊返回值
never类型表示函数永远不会正常返回(如抛出异常或无限循环):
function throwError(message: string): never {
throw new Error(message);
}
最佳实践
- 优先使用显式类型注解,提高代码可读性
- 避免使用
any作为参数或返回值类型 - 复杂函数建议单独定义类型别名:
type BinaryFunc = (a: number, b: number) => number;
const add: BinaryFunc = (a, b) => a + b;
类型兼容性
函数的参数类型和返回值类型需要严格匹配:
// 错误示例:参数类型不匹配
const func: (num: number) => void = (str: string) => {}; // 报错
// 正确示例
const func: (num: number) => void = (num: number) => {};
注意:TypeScript 采用结构化类型系统,参数名称不需要完全一致,但类型必须兼容。
