和 javascript 一样,typeScript 中的函数可以创建有名字的函数和匿名函数。
函数类型
function 函数,
function add(x: number, y: number): number { return x + y + 0 }
其中,x:number , y:number 定义的是参数的数据类型; 后面的那个定义的是函数的类型,如果函数没有返回值的话,一般默认返回的都是 void,因此为了书写的规范,最好就是即使没有返回值,也要指定一下函数类型是 void 而不要给留空;代码中返回 x + y + 0 是为了进行隐式的转换,
完整的定义其实是应该这样的
let myAdd: (baseValue: number, increment: number) => number = function(x: number, y : number) : number { return x + y}
但是这样蛮繁琐的,typeScript 中存下推断类型,typeScript 编译器会自动识别出类型
推断类型
如上,如果定义函数的时候一边定义的类型,另一边没有指定类型的话,编译器就会自动的进行识别,这就是类型推论中的一种:“按上下文归类”
let myAdd = function(x: number, y: number) : number { return x + y + 0 }
可选参数和默认参数
在 typeScript 中,传递的函数参数个数必须和期望的参数个数是一样的,即实参和形参必须一致; 在 typeScript 中每个函数参数都是必须的,这并不是说不能传递 null 或者 undefined 作为参数,二十编译器检查用户是够为每个参数都传入了值。
在 javaScript 中,参数是可传也可不传的,也就是说是可选的,如果没有传值的话,他的值就是 undefined ;在 typeScript 中如果想要实现这个效果,即参数是可选填的,只用我们在定义的时候在形参的边上使用 “?” 就可以实现;可选参数必须跟在必填参数的后边。在 typeScript 中也是可以传递默认参数的,如下这样 x 就和 2 共享数据类型
function add(x: 2, y?:number): number { return x + y }
剩余参数
在 javaScript 中,我们可以通过 arguments 来访问所有的参数,但是在 typeSript 中,不支持,但是我们可以 “...” 来将所有的参数放在一个变量里,例如:
function add(x: number, ...y: number[]) { let sum:number = 0 y.map(item => { sum += item }) return x +sum }
this 和 箭头函数