// 函数的定义 /*// 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>): 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.箭头函数