美文网首页
TS基础(七)函数

TS基础(七)函数

作者: Viewwei | 来源:发表于2020-12-23 10:21 被阅读0次

    在JavaScript中函数是一等公民。有两种常见定义函数的方式,函数声明和函数表达式。函数声明和函数表达式还是有稍微的区别:函数声明有变量提升的作用

    // 函数声明(Function Declaration)
    function sum(x, y) {
        return x + y;
    }
    
    // 函数表达式(Function Expression)
    let mySum = function (x, y) {
        return x + y;
    };
    

    函数有输入和输出,要在TS中对齐进行约束。需要把输入和输出考虑到,其中比较简单的定义如下

    function sum(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;
    }
    

    使用接口来定义函数的目的主要有如下几个方面的好处
    1:当一个函数当参数传递的时候,可以清楚知道函数的信息。
    2:可以保证以后函数参数个数,返回值类型不改变

    函数可选参数

    输入多余的参数是不被允许的,但是如果参数使用?,那么表示这个参数是可以不传递的。
    注意:带?的参数,写在最后才能被省略,否则会报错

    function buildName(firstName: string, lastName?: string) {
        if (lastName) {
            return firstName + ' ' + lastName;
        } else {
            return firstName;
        }
    }
    let tomcat = buildName('Tom', 'Cat');
    let tom = buildName('Tom');
    
    function buildName(firstName?: string, lastName: string) {
        if (firstName) {
            return firstName + ' ' + lastName;
        } else {
            return lastName;
        }
    }
    let tomcat = buildName('Tom', 'Cat');
    let tom = buildName(undefined, 'Tom');
    
    // index.ts(1,40): error TS1016: A required parameter cannot follow an optional parameter.
    

    参数默认值

    ES6中参数支持默认值,TS中同样支持默认值

    function buildName(firstName: string, lastName: string = 'Cat') {
        return firstName + ' ' + lastName;
    }
    let tomcat = buildName('Tom', 'Cat');
    let tom = buildName('Tom');
    

    省略参数

    //...items 代表省略参数,是一个数组
    function push(array: any[], ...items: any[]) {
        items.forEach(function(item) {
            array.push(item);
        });
    }
    
    let a = [];
    push(a, 1, 2, 3);
    

    函数重载

    重载允许一个函数接口不同数量不同类型的参数时候,做出不同的处理。重载样式如下

    function reverse(x: number): number;
    function reverse(x: string): string;
    function reverse(x: number | string): number | string {
        if (typeof x === 'number') {
            return Number(x.toString().split('').reverse().join(''));
        } else if (typeof x === 'string') {
            return x.split('').reverse().join('');
        }
    }
    

    相关文章

      网友评论

          本文标题:TS基础(七)函数

          本文链接:https://www.haomeiwen.com/subject/twjdnktx.html