// 函数的定义
/*// es5 函数声明
function run() {
return 'run'
}
// 匿名函数定义
let run2 = function () {
return 'run2'
}*/
// 1.ts 函数声明,指定返回值类型
function run11(): string {
return 'run'
}
// 匿名函数,指定返回值类型
let run12 = function (): number {
return 123;
}
// 2.ts 定义方法传参
function getInfo(name: string, age: number): string {
return `${name} --- ${age}`
}
// 没有返回值的方法,通过 void 声明
function run22(): void {
console.log(111);
}
console.log(getInfo('zhangning', 24));
// 3.方法可选参数
// es5 中方法的实参和形参可以不一样,但是 ts 中必须一样,如果不一样就需要配置可选参数
// age? 表示可选参数,可传可不传,可选参数必须配置到参数的最后面
function getInfo1(name: string, age?: number): string {
if (age) {
return `${name} --- ${age}`
} else {
return `${name} --- 年龄保密`
}
}
getInfo1('zhangning');// 不传也不会报错
// 4.默认参数(可选参数)
// es5 不可以设置默认参数,es6 和 ts 都可以设置默认参数
function getInfo2(name: string, age: number = 20): string {
return `${name} --- ${age}`
}
getInfo2('zhangning');
// 5.剩余参数
function sum(a: number, b: number, c: number, d: number, ...rest: Array): number {
var sum = a + b + c + d;
for (let i = 0; i < rest.length; i++) {
sum += rest[i]
}
return sum;
}
sum(1, 2, 3, 4, 5, 6, 7)
// 6.函数重载
// java 中方法的重载:重载指的是两个或者两个以上同名函数,但它们的参数不一样,这时就出现函数重载的情况
// typescript 中的重载,通过为同一个函数提供多个函数类型定义来实现多种功能的目的
// ts 为了兼容 es5 以及 es6 重载的写法和 java 中有区别
// es5 中出现同名的方法,会替换
/*
function css(config) {}
function css(config, val) {}
*/
// ts 中的重载
function getI(name: string): string;
function getI(age: number): number;
function getI(str: any): any {
if (typeof str === 'string') {
return `姓名:${str}`
} else {
return `年龄:${str}`
}
}
getI('zhangning');// zhangning
getI(24);// 24
// getI(false);// 错误的写法,因为没有找到参数匹配
// ts 中的重载,参数不同
function getI1(name: string): string;
function getI1(name: string, age: number): string;
function getI1(name: string, age?: number): any {
if (age) {
return `姓名:${name}----年龄:${age}`
} else {
return `年龄:${name}`
}
}
getI1('zhangning');
getI1('zhangning', 24);
// getI1(24);// 错误的写法,重载的方法中找不到
// 7.箭头函数