TS基础(七)函数

2020-12-23  本文已影响0人  Viewwei

在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('');
    }
}
上一篇 下一篇

猜你喜欢

热点阅读