第七课:函数类型;

107 阅读1分钟

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 ''};
  1. 可选参数: 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}) => ({})