1.普通模式:
// 函数声明
function a(x: number, y: string): string {return ''} // 参数固定,不可多和少;
// 函数表达式
let b = function (x: number, y: string): string {return ''} // 参数固定,不可多和少;
// 缺点:只规定了右边的类型,左边类型未作明确规定;
// 优化后如下:
interface param{
(x: number, y: string): string
}
const c: param = function(x: number, y: string): string {return ''};
- 可选参数: name?:type;
function a(x: number, y?: string): string {return ''}
// 注意:可选参数后面不能再添加必须属性;
function a(x: number, y?: string, c: boolean): string {return ''} // 报错;
3.参数默认值:name?:type = value;
// 用处:可以弥补可选参数后面不能添加必须参数的问题;
function a(x: number = 0, y: string): string {return ''};
a(undefined, '2');
4.剩余参数:
// 注:剩余参数只能作为最后一个参数;
// item: 默认处理为了数组;
function myPush(x: any[], ...item: any[]): any[] {
item.forEach(item => x.push(item));
return [];
}
myPush([], 1, '2', true);
5.重载:接收不同数量参数或不同类型参数做不同处理;
// 缺点:无法精确表达输入对应匹配的输出类型;
function myReverse(x: number | string): number | string | void {
if (typeof x === 'number') {
return 0;
}
else if (typeof x === 'string') {
return '0'
}
}
myReverse('666');
// 优化后如下:
function myReverse(x: number): number
function myReverse(x: string): string
function myReverse(x: number | string): number | string | void {
if (typeof x === 'number') {
return 0;
}
else if (typeof x === 'string') {
return '0'
}
}
6.解构:参数结构处理
function a({x, y}: {x: string, y: number}) => ({})