函数 function
在ts中,函数是主要的定义 行为的地方。 TypeScript为JavaScript函数添加了额外的功能,让咱们能够更容易地使用。css
在 JavaScript 中,有两种常见的定义函数的方式——函数声明和函数表达式git
一个函数有输入和输出,要在 TypeScript 中对其进行约束,须要把输入和输出都考虑到。github
function sum(x:number,y:number):number{ return x+y }
let mySum = function (x: number, y: number): number { return x + y; };
这二者是等价的,上面的代码只对等号右侧的匿名函数进行了类型定义,而等号左边的 mySum,是经过赋值操做进行类型推论而推断出来的typescript
let mySum: (x: number, y: number) => number = function (x: number, y: number): number { return x + y; };
注意:数组
与接口中的可选属性相似,咱们用 ? 表示可选的参数。须要注意的是,可选参数必须接在必需参数后面。换句话说,可选参数后面不容许再出现必需参数了tomcat
let myName :(firstName:string,lastName?:string)=>void = function(firstName:string,lastName?:string):void{ if (lastName) { console.log(firstName + ' ' + lastName); } else { console.log(firstName); } }
能够按照日常的js给参数添加默认值,TypeScript 会将添加了默认值的参数识别为可选参数,同时这样也不受‘可选参数必须接在必需参数后面’的限制了。编辑器
function buildName(firstName: string = 'Tom', lastName: string) { return firstName + ' ' + lastName; } let tomcat = buildName('Tom', 'Cat'); let cat = buildName(undefined, 'Cat');
在js中,arguments能够表明函数的全部的参数,能够在函数内获取全部参数。ES6 中,可使用 ...rest 的方式获取函数中的剩余参数(rest 参数)。一样的,ts也是支持...rest的方式。函数
function push(array: any[], ...items: any[]) { items.forEach(function(item) { array.push(item); }); } let a_function:number[] = [1,2,3]; push(a_function, 1, 2, 3);
剩余参数自己就是个数组,也须要进行类型声明。ui
什么是函数重载:两个以上的函数,具备相同的函数名,可是形参的个数或者类型不一样,编译器根据实参和形参的类型及个数的最佳匹配,自动肯定调用哪个函数,这就是函数的重载。this
function reverse(x: number): number; function reverse(x: string): string; function reverse(x: any): any{ if (typeof x === 'number') { return Number(x.toString().split('').reverse().join('')); } else if (typeof x === 'string') { return x.split('').reverse().join(''); } }
上例中,咱们重复定义了屡次函数 reverse,前几回都是函数定义,最后一次是函数实现。在编辑器的代码提示中,能够正确的看到前两个提示。
注意,TypeScript 会优先从最前面的函数定义开始匹配,因此多个函数定义若是有包含关系,须要优先把精确的定义写在前面。
在js中this能够经过上下文得知this的指向,在ts中,若不代表类型则容易报错。
emmm,开头的一句话:TypeScript为JavaScript函数添加了额外的功能,让咱们能够更容易地使用,还有规范
我把笔记和例子放到GitHub里了,如须要能够去看看,有什么不对的地方,欢迎指正,你们一块儿进步加油。