Typescript 学习笔记三:函数

中文网:https://www.tslang.cn/

官网:http://www.typescriptlang.org/

目录:

函数的定义

  • ES5 函数定义:函数声明、匿名函数、传参
// 函数声明
function fn1 () {
    return 123;
}
fn1(); // 调用

// 匿名函数
let fn2 = function () {
    console.log(456);
}
fn2();

// 传参
function fn3 (name, age) {
    return `姓名:${name},年龄:${age}`;
}
fn3('张三', 25);
  • ts 函数定义:函数声明、匿名函数、传参
// 函数声明
function fn1 ():number { // number 是函数返回值类型,没有返回值为 void
    return 123;
}
fn1();

// 匿名函数
let fn2 = function ():void {
    console.log(456);
}
fn2();

// 传参
function fn3 (name:string, age:number):string {
    return `姓名:${name},年龄:${age}`;
}
fn3('张三', 25);

可选参数

ES5 里面方法的实参和行参可以不一样,但是 ts 中必须一样,如果不一样就需要配置可选参数。

注意:可选参数必须配置到参数的最后面

function getInfo (name:string, age?:number):string { // age 为可选参数
    if (age) {
        return `姓名:${name},年龄:${age}`;
    } else {
        return `姓名:${name},年龄:保密`;
    }
}
console.log(getInfo('张三', 23));
console.log(getInfo('李四'));
// 错误的写法
function getInfo (name?:string, age:number):string { // name 为可选参数
    if (name) {
        return `姓名:${name},年龄:${age}`;
    } else {
        return `姓名:不知道,年龄:${age}`;
    }
}
console.log(getInfo('李四', 23));

默认参数

ES5 里面没法设置默认参数,ES6 和 ts 中都可以设置默认参数。

function getInfo (name:string, age:number=25):string { // age 默认为25
    if (age) {
        return `姓名:${name},年龄:${age}`;
    } else {
        return `姓名:${name},年龄:保密`;
    }
}
console.log(getInfo('张三', 23)); // 姓名:张三,年龄:23
console.log(getInfo('李四')); // 姓名:李四,年龄:25

剩余参数

ES6 中的三点运算符

function sum (a:number, b:number, ...nums:number[]):number {
    let sum = a + b;
    nums.forEach((n) => {
        sum += n;
    });
    return sum;
}
console.log(sum(1, 2, 3, 4, 5, 6)); // 21

函数重载

java 中方法的重载:重载指的是两个或者两个以上同名函数,但它们的参数不一样,这时会出现函数重载的情况。

Typescript 中的重载:通过为同一个函数提供多个函数类型定义来实现多种功能的目的。

ts 为了兼容 ES5 以及 ES6 重载的写法和 java 中有区别。

ES5 中出现同名方法,下面的会替换上面的方法。

function getInfo (name) {

}
function getInfo (name, age) {

}

ts 中的重载

// 单个参数,不同类型
function getInfo (name:string):string;
function getInfo (age:number):string;
function getInfo (str:any):any {
  if (typeof str === 'string') {
    return `姓名:${str}`;
  } else {
    return `年龄:${str}`;
  }
}
getInfo('张三');
getInfo(25);
getInfo(true); // 错误的写法
// 多个参数,可选参数
function getInfo (name:string):string;
function getInfo (name:string, age:number):string;
function getInfo (name:string, age?:number):string {
  if (age) {
    return `姓名:${str},年龄:${str}`;
  } else {
    return `姓名:${str}`;
  }
}
getInfo('张三');
getInfo(25); // 错误
getInfo('李四', 26);

箭头函数

同 ES6 中一样,修复 this 指向的问题,箭头函数里面的 this 指向上下文,即外层第一个不为箭头函数的 this。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 19/50 37.天才来自刻意的练习。 无数的成功人士,都是在专注地、重复地做一件事情。成功真的来得不简单,因为需...
    Jessica_27627阅读 1,176评论 0 0
  • 1. 前几天,与在外生活的朋友视频聊天时,她的孩子说想过年回来玩几天,朋友立即给她孩子设一道门坎:只要这次考到全年...
    天蓝蓝_b865阅读 3,887评论 7 16
  • 如果 如果我是世界首富我将为山村的孩子们盖一所学校。 如果我是老师我将把我所知道的知识传授给他们。 如果我是清洁工...
    夜空中最亮的星_58bf阅读 1,124评论 0 3
  • 做人,适时把自己“归零”,就会心胸开阔。 人生,难免会有成功与失败、顺境与逆境。顺境时,把自己适时“归零”,可以戒...
    斜倚幽篁阅读 1,293评论 0 0