1.函数声明

与javascript一样,ts的函数声明也分为两种:函数声明,函数表达式

1)函数声明:

function fn(age:number):string{

return `age is ${age}`

}

ps:与javascript类似,只是对参数以及返回值的类型加了限制

2)函数表达式

let fn:(age:number)=>string = function(age:number):string{}

注意:

这里的=>和箭头函数的符号没有关系,(**)=>**意思是:这是一个函数类型,括号内说明了参数的个数和类型箭头后面的说明了返回值的类型。

函数表达式的赋值不是必须的,可以先声明再赋值,类型说明也可以只写一边,另一边编译器会自动识别

2.参数相关

在参数后面跟上?表示为可选参数:

function fn( name:string, age?:number ):void{}

注意:可选参数必须在必选参数的后面。

 

默认参数同es6中的默认参数写法:

function fn( name:string, age = 18):void{}

注:默认值可不放在最后,但是要想使用默认值,必须在调用的时候在对应位置传入undefined。

2)剩余参数

function buildName(firstName: string, ...restOfName: string[]) { return firstName + " " + restOfName.join(" "); }

类似es6的...这里也可以用参数末尾的...some string[]数组来收集多余的参数,只不过这里加了类型限定

3.重载

function fn(param: number): number;

function fn(param: string): string;

function fn(param: any): any{};

写法上,函数头相同(输入输出的类型限定不同),前面的函数只有函数头,没有函数体,最后一个函数才声明函数体,

调用时,输入的参数类型符合哪个函数头的类型,函数返回值就会被赋予该函数头中定义的类型,这样作可以让类型检测更可靠。

注意:之前的所有的函数头的类型,必须是最后一个函数的类型的子集

4.关于this

并没有搞明白官方文档讲this是干嘛,没看懂,暂留