函数定义
function add1(x: number, y: number) {
return x + y //类型推断
}
let add2: (x: number, y: number) => number
type add3 = (x: number, y: number) => number
interface add4 {
(x: number, y: number): number
}
add1(1, 2,) // 形参和实参必须一一对应
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
}
add6(1, undefined, 3)
//必选参数前,默认参数是不可以省略的,必须明确的传入undefined,来获取他的默认值
//必选参数后的默认值是可以不传的
function add7(x: number, ...rest: number[]) {
return x + rest.reduce((pre, cur) => pre + cur);
}
add7(1, 2, 3, 4, 5)
函数重载
//java函数重载:两个函数名称相同,但是参数个数或参数类型不同的话,就实现了函数重载
//好处:不需要为相似功能的函数,选用不同的函数名称,增强了函数的可读性
//js中不能实现函数重载,因为后者会覆盖前者,但是可以模仿。ts的函数重载,要求我们先定义一系列的函数声明
function add8(...rest: number[]): number;
function add8(...rest: string[]): string;
function add8(...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(add8(1, 2))
console.log(add8('a', 'b', 'c'))
ts编译器在处理重载的时候,会去查询一个重载的列表,并且会尝试第一个定义,如果匹配的话就是用这个函数定义,如果不匹配的话,接着往下查找,所以我们把最容易匹配的函数定义写载最前面。----指add8函数












网友评论