在TypeScript中,函数重载允许你为同一个函数定义多个签名,从而让函数能够根据传入参数的不同,表现出不同的行为。实现函数重载的基本步骤包括:首先声明函数的多个类型签名,然后实现函数的具体逻辑。下面是一个函数重载的例子,该函数可以接受不同数量和类型的参数,并作出相应的处理:
// 定义函数重载的类型签名
function add(a: number, b: number): number;
function add(a: string, b: string): string;
// 实现函数逻辑
function add(a: any, b: any): any {
if (typeof a === 'number' && typeof b === 'number') {
return a + b;
} else if (typeof a === 'string' && typeof b === 'string') {
return a.concat(b);
} else {
throw new Error('Arguments must be of the same type and either both numbers or both strings.');
}
}
// 使用函数
console.log(add(1, 2)); // 输出: 3
console.log(add('Hello, ', 'world!')); // 输出: Hello, world!
// 下面这行代码会抛出错误
// console.log(add(1, '2')); // 错误: Arguments must be of the same type and either both numbers or both strings.
在这个例子中,我们首先声明了两个重载签名:
add(a: number, b: number): number;
表示当两个参数都是数字时,函数返回一个数字。add(a: string, b: string): string;
表示当两个参数都是字符串时,函数返回一个字符串。
然后,我们实现了函数add
的实际逻辑,通过检查参数类型来决定执行哪种操作。注意,在实际的TypeScript项目中,为了获得更严格的类型检查和更好的开发体验,通常会尽量避免使用any
类型,而是使用联合类型和类型守卫来精确定义和检查类型。但为了简化示例并集中说明函数重载的概念,这里使用了any
类型。在更复杂的场景下,建议采用更精确的类型处理方式。