函数
1. 函数类型
1.1 为函数定义类型
具名函数
function add(x,y) {
return x+y;
}
添加类型
function add(x:number, y:number): number {
return x+y;
}匿名函数
let add = function(x,y) {
return x+y;
}
添加类型
let add = function(x:number,y:number):number {
return x+y;
}1.2 完整函数类型
第二部分是返回值类型,如 number, 对于函数和返回值类型必须使用 => 符号。返回值类型是函数类型的必要部分,如果没有返回值,必须指定为 void
推断类型
即赋值语句一边(如左边)指定了类型,而另一边(如右边)没有指定类型,TypeScript会自动识别出类型。
1.3 函数参数
TypeScript要求函数的实参个数和形参个数相等:
可选参数
可以使用 ? 表示参数可选。 可选参数必须放在函数的必须参数后面。
默认参数
可选参数函数和默认参数函数共享一个函数类型:(firstName:string, lastName: string) => string,此时默认参数的默认值消失了,只表示它是可选参数
和可选参数函数不同,默认参数函数的默认值参数不必放在必须参数后面,此时如果默认值参数出现在必须参数之前,那么必须明确传入 undefined 来获取默认值:
剩余参数
剩余参数函数的类型:
2. this
this和箭头函数
在js中,this的值只有在被调用的时候才会指定,而不是在定义函数的时候。
为了解决这个问题,可以在函数被返回时绑定好 this ,无论之后怎么调用,this 都是 deck 对象,而不是调用时的值:
更为友好的是,如果使用 TypeScript,且给编译器设置了 --noImplicitThis , 那么第一种情况里的 this 会认为是 any 类型,而第二种this是deck的类型。
函数重载
当需要某个方法,根据传入参数的类型不同,而返回不同类型的值时,就需要用到重载
注意点
定义重载时,一定要把最精确的定义放在最前面
function pickCard(x): any不是重载列表的一部分,即pickCard函数只有两个重载,只能接受对象或者数字作为参数,其它参数则会报错
Last updated
Was this helpful?