一、函数的定义
// 1. 函数声明法
// 规定返回值必须为string类型
function run():string {
return 'im string'
}
// 2. 匿名函数法
let run = function():string {
return 'im string'
}
// 没有返回值时
function run():void {
return 'im string'
}
二、函数传参
es5中方法的实参和形参数目可以不一致,但ts中必须一致,当可能存在不一致情况时要配置可选参数。
// 1. 一般形式
function getInfo(name:string, age:number):string {
return `${name} --- ${age}`
}
// 2. 可选参数
// 在可选参数前面加上?表示这个参数可以没有
// 注意:可选参数必须在必需参数后面,即可选参数后面不允许再出现必需参数
function getInfo(name:string, age?:number):string {
if (age) {
return `${name} --- ${age}`
} else {
return `${name}`
}
}
// 3. 默认参数
// es5中无法设置默认参数,但es6和ts中都可以设置默认参数
// 调用函数时,没有传入指定参数就默认使用设置的参数
// 注意:ts会将默认参数识别为可选参数,但其不受【可选参数必须在必需参数后面】的限制
// 3.1 ts中设置默认参数
function getInfo(name:string, age = 20):string {
if (age) {
return `${name} --- ${age}`
} else {
return `${name}`
}
}
// 3.2 es6中设置默认参数
function getInfo(name, age = 20) {
if (age) {
return `${name} --- ${age}`
} else {
return `${name}`
}
}
// 4. 剩余参数
// 普通情况,需要很多个形参接收参数
function sum (a:number, b:number, c:number, c:number):number {
return a+b+c+d
}
// 用剩余参数,接收传来的多余参数
// 用数字数组表示
function sum(...res:number[]):number {
}
三、函数重载
ts中的重载,通过为同一个函数提供多个函数类型定义实现多种功能目的。
ts为了兼容es5以及es6重载的写法和java中有区别(es5中出现同名方法,下面的会替换上面的方法)。
- 重载的意义
// 利用联合类型实现判断传入数据类型,返回对应数据的需求
function reverse(x: number | string): number | string | void {
if (typeof x === 'number') {
return Number(x.toString().split('').reverse().join(''));
} else if (typeof x === 'string') {
return x.split('').reverse().join('');
}
}
// 但这样就不能精确表达,无法控制输出变量类型,如输入为数字时,输出应该也为数字
// 用重载增加类型控制
function reverse(x: number): number;
function reverse(x: string): string;
function reverse(x: number | string): number | string | void {
if (typeof x === 'number') {
return Number(x.toString().split('').reverse().join(''));
} else if (typeof x === 'string') {
return x.split('').reverse().join('');
}
}