前言

本文主要记录下 TypeScript 中的函数,日常学习总结篇。

在 JavaScript 中,函数是构建应用的一块基石,我们可以使用函数抽离可复用的逻辑、抽象模型、封装过程。在 TypeScript 中,函数仍然是最基本、最重要的概念之一。

一、函数类型定义

1⃣️、直接定义函数类型

函数类型包括两部分:参数类型和返回值类型。

// 函数声明 命名函数
function add(x: number, y: number): number {return x + y
}// 函数表达式 匿名函数
const add = (x: number, y: number): number => {return x + y
}

定义函数时,如果省略参数的类型,TypeScript 会默认这个参数为 any 类型;如果省略返回值类型,函数无返回值时,TypeScript 会默认函数返回值为 viod 类型;函数有返回值时,TypeScript 会根据定义的逻辑推断出返回类型。

// 完整的函数类型
const add: (x: number, y: number) => number = (x: number, y: number): number => x + y// 省略左侧
const add = (x: number, y: number): number => x + y// 省略右侧
const add: (x: number, y: number) => number = (x, y) => x + y

2⃣️、接口定义函数类型

interface Add {(x: number, y: number): number
}const add: Add = (x: number, y: number): number => x + y

3⃣️、类型别名定义函数类型

type Add = (x: number, y: number) => numberconst add: Add = (x: number, y: number): number => x + y

注意:这里的 => 与 ES6 中箭头函数的 => 不同。TypeScript 函数类型中的 => 用来表示函数的定义,其左侧是函数的参数类型,右侧是函数的返回值类型;而 ES6 中的 => 是函数的实现。

二、函数参数定义

1⃣️、可选参数

在 TypeScript 中函数的形参和实参类型数量必须保持一致,但有时,函数有些参数不是必须的,这时可以将函数的参数设置为可选参数。可选参数只需在参数名后加一个 ? 即可。

注意:可选参数必须放在必选参数后面。

type FullName = (firstName: string, lastName?: string) => stringconst getFullName: FullName = (firstName: string, lastName?: string): string => {return lastName ? `${firstName}-${lastName}` : firstName
}

2⃣️、默认参数

当用户没有给一个参数传值或者传的值是 undefined 时,这个参数叫做可以有默认值的参数。默认参数是参数后面跟 = 号,之后跟默认值。

const getFullName = (firstName: string, lastName: string = "Jenny"): string => {return `${firstName}-${lastName}`
}

注意:在所有必选参数后面带默认值的参数都是可选的, 与可选参数一样,在调用函数的时候可以省略;与普通可选参数不同的是,带默认值的参数不需要放在必须参数的后面,如果带默认值的参数出现在必选参数前面,必须明确的传入 undefined 值来获得默认值。

3⃣️、剩余参数

必选参数、默认参数和可选参数有个共同点:它们表示某一个参数。但有时,我们想同时操作多个参数,或者你并不知道会有多少参数传递过来,这时便用到剩余参数。

const getMaxNum = (a: number, b: number, ...arr: number[]): number => {return Math.max(a, b, ...arr)
}console.log(getMaxNum(2, 1, 7, 3, 9, 0)) // 9

剩余参数会被当做个数不限的可选参数。可以一个都没有,同样也可以有任意个。

三、函数重载

TypeScript 的函数重载通过为一个函数提供多个函数类型定义,从而对函数调用的返回值进行检查。

// 重载函数声明
function add(x: string, y: string): string
function add(x: number, y: number): number// 定义函数实现
function add(x: string | number, y: string | number): string | number {// 在实现上我们要注意严格判断两个参数的类型是否相等,而不能简单的写一个 x + yif (typeof x === 'string' && typeof y === 'string') {return x + y} else if (typeof x === 'number' && typeof y === 'number') {return x + y}
}console.log(add(1, 2))
console.log(add('a', 'b'))
// console.log(add(1, 'a')) // error

注意:函数重载只能用 function 来定义,不能使用接口、类型别名来定义。

TypeScript - 函数相关推荐

  1. TypeScript 函数以及简单使用和操作

    TypeScript 函数 一.常规函数定义和函数调用方式 二.带参数函数定义和调用方式 三.匿名函数定义和调用方式 四.构造函数定义和调用方式 五.递归函数定义和调用方式 六.箭头函数定义和调用方式 ...

  2. TypeScript函数和类

    函数介绍 函数是JavaScript应用程序的基础.它帮助你实现抽象层,模拟类,信息隐藏和模块.在TypeScript里,虽然已经支持类,命名空间和模块,但函数仍然是主要的定义行为的地方.TypeSc ...

  3. TypeScript 函数与以及类的使用

    一.函数 1.函数的基本使用 介绍 函数是JavaScript应用程序的基础.它帮助你实现抽象层,模拟类,信息隐藏和模块.在TypeScript里,虽然已经支持类,命名空间和模块,但函数仍然是主要的定 ...

  4. TypeScript函数与类的使用基础知识点

    1.类的使用 1.1 类的基本使用 定义:TypeScript 是面向对象的JavaScript.                              类描述了所创建的对象共同的属性和方法.   ...

  5. 3、TypeScript 函数

    目录 1. 函数的基本使用 2. 函数参数的处理 3. 构造函数 4. 函数重载 参数类型不同: 参数类型不同: 1. 函数的基本使用 介绍 函数是JavaScript应用程序的基础.它帮助你实现抽象 ...

  6. typescript函数使用

    一.定义函数的方式: 函数声明(Function Declaration) 函数表达式(Function Expression) 用接口定义函数 函数的类型 (1)函数声明 function sumN ...

  7. typescript函数和类的基础

    目录 函数 函数的基本使用 函数参数的使用 构造函数 函数重载 类 类的基本使用 类的继承 static与instanceof 修饰符 getter与setter 抽象类 初始化 函数 函数的基本使用 ...

  8. Typescript函数和类的使用

    一.函数的基本使用 函数是Javascript应用程序的基础.可以实现抽象层.模拟类.信息隐藏和模块.在Typescript里,虽然已经支持类.命名空间和模块,但函数仍然是主要的定义行为的地方.Typ ...

  9. React+typescript 函数组使用 ref

    正常获取函数组件DOM,因为函数组件没有实例current,所以要使用React.forwardRef来配合React.createRef解决: import React from 'react'co ...

最新文章

  1. 无导师学习_如何找到一位导师并加快学习速度:新手指南。
  2. Canonical面向Ubuntu 16.04 LTS发布首批内核安全修复补丁
  3. mac设置截图和录屏的快捷键
  4. css的几种垂直水平居中方法
  5. vuecli3.0用scss写响应式网页,封装简单的百分比换算函数
  6. iOS base64解码失败
  7. python单因素方差分析_Python数据科学:方差分析
  8. 汉字的计算机内吗就是汉字输入码,汉字输入编码
  9. 彩色图像怎样转灰度图像
  10. (五)Kotlin简单易学 基础语法-初始函数(下)
  11. 用计算机计算应该注意什么,多功能计算器的使用方法及注意事项
  12. 如何制定SEO文章发布模板?
  13. 【论文翻译】转移学习推断跨异构网络的社会联系
  14. 20189221 2018-2019-2 《密码与安全新技术专题》第六周作业
  15. MySQL配置参数大全
  16. R语言作图好看的秘籍:RColorBrewer调色板详解
  17. 电脑连接蓝牙耳机声音总是断断续续:
  18. Firefox迅雷组件导致a标签进行两次请求提交
  19. [USACO08DEC]在农场万圣节Trick or Treat on the Farm【Tarja缩点+dfs】
  20. OPPO R9st怎么刷机 OPPO R9st的刷机教程 OPPO R9st完美解除账号锁

热门文章

  1. 如何开发微信第三方小程序组件
  2. HyperGBM之元学习器(meta_learner)
  3. mac(苹果)电脑终端使用技巧
  4. Java 计蒜客——开关灯
  5. lay和lied_辨析:lie, lay, lain, lied, laid
  6. 写技术博客的一些心得体会
  7. inter服务器修改ip地址,如何更改您的IP地址(公共IP和本地IP)
  8. 求长方柱的体积和表面积
  9. linux投影手机,linux连接投影机方法介绍
  10. 网站老被劫持快照被黑怎么修复解决