函数
函数就是包裹在花括号中的代码块,前面使用了关键词 function。
函数返回值
在使用 return 语句的时候,函数会停止执行,并返回指定的值。
function greet(): string {
return "Hello World";
}
定义了函数 greet(),返回值的类型为 string。
带参数的函数
function add(x: number, y: number): number {
return x + y;
}
定义了函数 add(),返回值的类型为 number,add() 函数中定义了两个 number 类型的参数,函数内将两个参数相加并返回。
可选参数和默认参数
可选参数
在 ts 函数中,如果我们定义了参数,则我们必须传入这些参数,除非将这些参数设置为可选,可选参数使用问号标识 ?。
function multi(x: number, y: number): number {
return x * y;
}
multi(1); // error 未提供 "y" 的自变量。
function add(x: number, y?: number): number {
return x + (y ? y : 0);
}
add(1);
默认参数
函数设置了默认值的参数,就是可选的。如果不传入该参数,它就会等于默认值。
function multi(x: number = 1, y: number = 1) {
return x * y;
}
multi(1);
默认值与可选参数不能同时使用
// error 参数不能包含问号和初始化表达式
function multi(x: number, y?: number = 1) {
return x * y;
}
rest 参数
有一种情况,我们不知道要向函数传入多少个参数,这时候我们就可以使用剩余参数来定义,剩余参数语法允许我们将一个不确定数量的参数作为一个数组传入。
function maxNum(x: number, ...rest: number[]): number {
return Math.max(x, ...rest);
}
函数重载
有些函数可以接受不同类型或不同个数的参数,并且根据参数的不同,会有不同的函数行为。这种根据参数类型不同,执行不同逻辑的行为,称为函数重载 function overload。
function area(w: number, h: number): number;
function area(rect: { w: number; h: number }): number;
function area(v1: any, v2?: any) {
if (typeof v1 === "object") {
const { w, h } = v1;
return w * h;
}
return v1 * v2;
}
void 返回类型
void 类型表示函数没有返回值,但是允许函数返回undefined 和 null(假定没有打开 strictNullChecks) 。
function func(): void {}
// 允许函数返回 undefined
function func1(): void {
return undefined;
}
// 函数的运行结果如果是抛出错误,也允许将返回值写成void。
function func2(): void {
throw new Error("未知错误");
}
// 打开 strictNullChecks 的情况,没打开的情况下面不会报错。
function func3(): void {
return null; // error 不能将类型“null”分配给类型“void”
}
function func4(): void {
return true; // error 不能将类型“boolean”分配给类型“void”
}