函数声明
function sum(x: number, y: number): number {return x + y;}
函数表达式
在 TypeScript 的类型定义中,=> 用来表示函数的定义,左边是输入类型,需要用括号括起来,右边是输出类型。
let mySum: (x: number, y: number) => number = function (x: number, y: number): number {return x + y;};
接口定义
interface SearchFunc {(source: string, subString: string): boolean;}let mySearch: SearchFunc;mySearch = function(source: string, subString: string) {return source.search(subString) !== -1;}
可选参数
与定义接口一样,可以使用?表示可选的参数,可选参数后面不可以再出现必须参数
function buildName(firstName: string, lastName?: string) {if (lastName) {return firstName + ' ' + lastName;} else {return firstName;}}let tomcat = buildName('Tom', 'Cat');let tom = buildName('Tom');
参数默认值
在 ES6 中,我们允许给函数的参数添加默认值,TypeScript 会将添加了默认值的参数识别为可选参数,此时就不受「可选参数必须接在必需参数后面」的限制了
function buildName(firstName: string = 'Tom', lastName: string) {return firstName + ' ' + lastName;}let tomcat = buildName('Tom', 'Cat');let cat = buildName(undefined, 'Cat')
剩余参数
reset参数只能是函数的最后一个参数
function push(array: any[], ...items: any[]) {items.forEach(function(item) {array.push(item);});}let a = [];push(a, 1, 2, 3);
重载
可以使用重载定义多个函数类型,在编辑器的代码提示中,可以正确的看到这些类型提示
注意:TypeScript 会优先从最前面的函数定义开始匹配,所以多个函数定义如果有包含关系,需要优先把精确的定义写在前面
function reverse(x: number): number;function reverse(x: string): string;function reverse(x: number | string): number | string | void {if (typeof x === 'number') {return Number(x.toString().split('').reverse().join(''));} else if (typeof x === 'string') {return x.split('').reverse().join('');}}
