如何去定义一个函数
4种方式:
function addFunc1(x:number, y:number) { return x + y; } let addFunc2: (x:number, y:number) => number; type addFunc3 = (x:number, y:number) => number; interface addFunc4 { (x:number, y:number): number; }
ts 对函数参数类型、个数有什么要求
形参实参必须一一对应。
addFunc1(1) // 应有 2 个参数,但获得 1 个。未提供 "y" 的自变量。
如果要省略可使用可选参数:
function addFunc5(x:number, y?:number) { return y ? x + y : x; } addFunc5(1)
注意:必选参数不能位于可选参数后。
// 下面就会报错:必选参数不能位于可选参数后。 function addFunc5(x:number, y?:number, z: number) { return y ? x + y + z: x + z; }
为参数赋值默认值:必选参数之前,默认参数是不能省略的,必须明确的传入 undefined
来获取其默认值,必选参数之后的默认值可以不用传。
function addFunc6(x:number, y = 0, z:number, q = 1) { return x + y + z + q; } addFunc6(1, undefined, 3)
参数不确定可以使用剩余参数
function addFunc7(x:number, ...rest: number[]) { return x + rest.reduce((pre, cur) => pre + cur); } console.log(addFunc7(1, 2, 3, 4, 5));
函数重载
先定义一系列名称相同的函数声明,声明列表定义完成后,需在类型最宽泛版本中实现这个重载
function addFunc8(...rest: number[]): number; function addFunc8(...rest: string[]): string; function addFunc8(...rest: any[]): 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(addFunc8(1, 2)); console.log(addFunc8("kaimo", '313'));