二、typscript(数组的类型、类数组、函数的类型)-CSDN博客
三、函数的类型
3.1、函数的表示方法——函数声明
function sum(x: number, y: number): number {
return x + y;
}
// sum(1, 2) 成功
// sum(1, 2, 3) 编译错误,因为参数不能多也不能少
// 函数表达式
let mySum: (x: number, y: number) => number = function (x: number, y: number): number {
return x + y;
};
注意:在 TS 的类型定义中,=> 用来表示函数的定义,左边是输入类型,需要用括号括起来,右边是输出类型。而在 ES6 中,=> 叫做箭头函数。
3.2、用接口定义函数形状
interface SearchFunc {
(source: string, subString: string): boolean;
}
let mySearch: SearchFunc;
mySearch = function(source: string, subString: string) {
return source.search(subString) !== -1;
}
3.3、可选参数
// 1.1、可选参数:在参数名后面加上“ ?”
function buildName(firstName: sting, lastName?: string){
if(lastName){
return firstName + '' + lastName;
}else{
return firstName;
}
}
//注意:可选参数必须放在必需参数后面,换句话说,可选参数后面不允许再出现必需参数(可选参
数必须在最后)
let tomcat = buildName('Tom', 'Cat')
let tom = buildName('Tom')
// 1.2、参数默认值
function push(firstName: string, lastName: string = '123'){
return firstName + '' + lastName
}
let tomcat = buildName('Tom', 'Cat');
let tom = buildName('Tom')//因为默认值的关系push方法也可以返回TomCat
// 1.3、剩余参数:用 ... 表示剩余参数,它其实是一个数组
function push(array:any[], ...items: any[]){
items.forEach(function(item){
array.push(item)
})
}
let a:any[] = [];
push(a,1,2,3)
3.4、函数的重载:有些函数可以接受不同类型或不同个数的参数,并且根据参数的不同,会有不同的函数行为。这种根据参数类型不同,执行不同逻辑的行为,称为函数重载(function overload)。
reverse('abc') // 'cba'
reverse([1, 2, 3]) // [3, 2, 1]
// 上例函数根据参数类型的不同,分别执行对应的逻辑(说明reverse方法内部有处理字符串和数组
的两套逻辑),这就叫“函数重载”。
TypeScript 对于“函数重载”的类型声明方法是,逐一定义每一种情况的类型
function reverse(str:string):string;
function reverse(arr:any[]):any[];
上例中,分别对函数reverse()的两种参数情况,给予了类型声明。但是后面还必须对函数
reverse()给予完整的类型声明;具体如下:
function reverse(str:string):string;
function reverse(arr:any[]):any[];
function reverse(
stringOrArray:string|any[]
):string|any[] {
if (typeof stringOrArray === 'string')
return stringOrArray.split('').reverse().join('');
else
return stringOrArray.slice().reverse();
}
// 上例中,前两行类型声明列举了重载的各种情况。
// 第三行是函数本身的类型声明,它必须与前面已有的重载声明兼容。