Appearance
函数重载
JavaScript本身是个动态语言。 JavaScript里函数根据传入不同的参数而返回不同类型的数据是很常见的。而TypeScript提供了函数重载,允许你为同一个函数提供多个函数签名,从而能够根据不同的参数类型和数量来调用不同的实现。 函数重载可以增加代码的灵活性和可读性,特别在参数类型或参数个数不确定时非常有用。
下面是一个函数重载的示例:
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('Unsupported parameter types');
}
}
console.log(add(1, 2)); // 输出: 3
console.log(add("Hello", " World")); // 输出: Hello World
在上面的示例中,我们定义了一个名为add
的函数。我们使用多个函数签名重载这个函数,分别处理两个数字相加和两个字符串拼接的情况。然后,我们提供了一个实现函数,用于根据传入参数的类型和数量来选择不同的实现。如果传入的参数不符合预期的类型,将会抛出一个错误。 函数重载的关键在于函数签名的声明。通过一系列函数签名的重载,TypeScript编译器能够根据调用时的参数类型来选择正确的函数实现。
为了让编译器能够选择正确的检查类型,它与JavaScript里的处理流程相似。 它查找重载列表,尝试使用第一个重载定义。 如果匹配的话就使用这个。 因此,在定义重载的时候,一定要把最精确的定义放在最前面。
请注意,函数重载只在TypeScript的类型检查阶段起作用,最终编译为JavaScript时,只会保留实现函数。