函数
函数是 JavaScript 应用程序的基础,它帮助你实现抽象层,模拟类,信息隐藏和模块。在 TypeScript 里,虽然已经支持类,命名空间和模块,但函数仍然是主要的定义行为的地方。TypeScript 为 JavaScript 函数添加了额外的功能,让我们可以更容易地使用。
- TypeSCript中函数实参,形参个数必须一一对应,且类型也一一对应。
- 函数必选参数不能位于可选参数之后。
- 函数必选参数前的参数如果要取默认值需要赋值undefined占位,必选参数后的参数获取默认值不需要传undefined。
- 在 JavaScript 里,你可以使用 arguments 来访问所有传入的参数。在 TypeScript 里,你可以把所有参数收集到一个变量里,剩余参数会被当做个数不限的可选参数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| let add1: (x: number, y: number) => number
type add2 = (x: number, y: number) => number
interface add3 { (x: number, y: number): number }
let add: add3 = (x, y) => x + y;
add(1,2,3)
function add4(x:number,y?:number,z:number){ return y ? x + y : x; }
function add5(x: number, y = 0, z: number, q = 1) { return x + y + z + q; }
console.log(add5(1, undefined, 3));
|
函数重载
在C++或者java等静态语言中,两个函数名称相同,但是参数类型不同或者参数个数不同,就实现了函数重载。
函数重载的好处是:不需要为功能相似的函数起不同的名称,增强了函数的可读性。
函数重载一般在实现时用any类型
编译器选择正确的检查类型时,它查找重载列表,尝试使用第一个重载定义。 如果匹配的话就使用这个。因此,在定义重载的时候,一定要把最精确的定义放在最前面。
1 2 3 4 5 6 7 8 9 10 11 12 13
| function add(...rest: number[]): number; function add(...rest: string[]): string; function add(...rest: any[]) { let first = rest[0]; if (typeof first === 'number') { return rest.reduce((pre, cur) => pre + cur); } if (typeof first === 'string') { return rest.join(''); } } console.log(add(1, 2)) console.log(add('a', 'b', 'c'))
|
参考