如果函数定义
四种方式, 后三种只是函数类型的定义, 并没有具体的实现, 真正调用的时候, 需要书写这个函数体
- function add0(x: number, y: number ) {
- return x + y
- }
- let add11: (x: number, y: number) => number
- type add2 = (x: number, y: number) => number
- interface add3 {
- (x: number, y: number): number
- }
- // add0(1,2,3) 参数必须对应, 否则报错
可选参数
- function add5(x: number, y?: number) {
- return y? x + y: x;
- }
- add5(1) // 可选参数必须在必须参数之后
默认参数
- function add6(x: number, y = 0, z: number, q = 1) {
- return x + y + z + q
- }
- console.log(add6(1,undefined,3))//5 在必须参数之前的默认参数需要用 undefined 来生效
剩余参数
- function add7(x:number, ...REST:number[]) {
- return x + REST.reduce((pre, cur) => pre + cur)
- }
- console.log(add7(1, 2, 3, 4, 5)) //15
函数重载 (要把最容易匹配的写在最前面)
- function add8(...REST: number[]): number
- function add8(...REST: string[]): string
- function add8(...REST: any[]): any {
- let first = REST[0];
- if (typeof first === 'string'){
- return REST.join('')
- }
- if (typeof first === 'number') {
- return REST.reduce((pre, cur) => pre + cur)
- }
- }
- console.log(add8(1, 2, 3))// 6
- console.log(add8('a', 'b', 'c'))// abc
来源: http://www.jianshu.com/p/63169c463500