函数类型
function myAdd(x: number, y: number): number {
return x + y;
}
let myAdd = function (x: number, y: number): number {
return x + y;
};
完整的函数类型
let myAdd: (x: number, y: number) => number = (x: number, y: number): number => {
return x + y;
};
参数
可选参数
在TypeScript
中我们可以在参数后面使用 ?
实现可选参数的功能:
const add = (x: number, y?: number): number => {
return x + y;
};
可选参数必须跟在必须跟在其他参数后面。
默认参数
function getName(firstName: string, lastName="牛逼"): string {
return firstName + lastName
}
console.log(getName("卢本伟"));//卢本伟牛逼
console.log(getName("卢本伟",undefined));//卢本伟牛逼
console.log(getName("卢本伟","666"));//卢本伟666
与普通可选参数不同的是,带默认值的参数不需要放在必须参数的后面。 如果带默认值的参数出现在必须参数前面,必须明确的传入 undefined
值来获得默认值:
function getName(firstName = '卢本伟', lastName: string): string {
return firstName + lastName;
}
console.log(getName(undefined, '牛逼')); //卢本伟牛逼
剩余参数
function getNames(firstName: string, ...others: string[]): string {
return firstName + ',' + others.join(',');
}
console.log(getNames('a', 'b', 'c')); //a,b,c
剩余参数会被当做个数不限的可选参数。 可以一个都没有,同样也可以有任意个。
重载
重载表示函数名称相同,而参数、类型、返回类型都可以不同。
interface User{
name: string;
age: number;
}
function getUserInfo(user: User): User;
function getUserInfo(user: string): string;
function getUserInfo(user:any): any{
return user
}
console.log(getUserInfo("zhangsan")); //zhangsan
console.log(getUserInfo({name:"shabi",age:22})); // { name: 'lisi', age: 22 }
如果参数类型不同,则参数类型应设置为 any
。参数数量不同可以将不同的参数设置为可选。
在定义重载的时候,一定要把最精确的定义放在最前面,注意:这里只有两个重载,function getUserInfo(user:any): any
并不是重载列表的一部分。