ts实现函数重载

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function f1(...rest: Array<number>): number
function f1(...rest: Array<string>): string
function f1(...rest: Array<any>): any {
let first = rest[0]
if (typeof first == "number") {
return rest.reduce((pre, cur) => pre + cur)
}
else {
return rest.join("")
}
}

console.log(f1(1, 2, 3));
console.log(f1("a", "b", "c"));

为了让编译器能够选择正确的检查类型,它与JavaScript里的处理流程相似。 它查找重载列表,尝试使用第一个重载定义。 如果匹配的话就使用这个。 因此,在定义重载的时候,一定要把最精确的定义放在最前面。

注意,function f1(...rest: Array<any>): any并不是重载列表的一部分,因此这里只有两个重载:一个是接收数字数组另一个接收字符数组。 以其它参数调用会产生错误

thank u !