当前位置: 首页 > article >正文

TypeScript(六)函数

目录

前言

可选参数

参数默认值

剩余参数

类型推断

函数重载

结尾

参考文章


前言

在前面的文章中,我使用对象类型以及接口分别定义了函数类型,浅谈了函数的定义及基本使用。本文将分享函数的进阶用法

可选参数

函数参数可以被标记为可选的,这意味着在调用函数时可以省略这个参数。要使参数成为可选参数,写法与接口的可选属性一样,在参数名后面加上一个问号?

function foo(params?: string): void {
    console.log(params)
}

需要注意的是,必选参数不能位于可选参数后,下面代码会提示错误

function foo(params?: string, params2): void {
    console.log(params, params2)
}

正确写法

function foo(params2, params?: string): void {
    console.log(params, params2)
}

参数默认值

参数默认值是在函数声明时可以为函数参数指定一个默认值,当传入的实参为空时使用该值

function foo(params?: string, params2: string = "hello"): void {
    console.log(params, params2)
}

此时函数中被赋予参数默认值的参数也建议放在最后(一般接入sonar会提示)

function foo(params2: string = "hello", params3: string): void {// 不推荐
    console.log(params2, params3)
}
function foo2(params3: string, params2: string = "hello"): void {// 建议这么写
    console.log(params2, params3)
}

剩余参数

剩余参数实际是JS中的语法,在ES6之前,使用function关键字声明函数一般使用arguments获取参数类数组,在ES6的结构赋值和箭头函数出现后,一般使用 ...args 获取函数剩余参数或所有参数

function foo(...args): void {
    console.log(...args, ...arguments)// a b c a b c
}
foo("a", "b", "c")

类型推断

TypeScript中函数可以自动推断返回值类型,比如

function foo(num: number, num2: number) {
    return num + num2
}

上述代码会根据想加逻辑将返回值推断为number

function foo(num: number, num2: number): number

函数重载

函数重载是TS中十分重要的特性,它允许我们针对同一个函数名定义多种参数及返回值类型;在调用时会根据传入的参数类型和返回值类型来自动选择正确的函数;函数重载的写法与接口和对象之间的关系有点相似:定义抽象的函数声明,使用函数将其实现。

function foo(num: number, num2: number): number
function foo(str: string): string
function foo(str: number | string, num2?: number) {
    return typeof str === "string" ? str : str + num2
}

上述例子是一个简单的函数重载,我定义了两个函数待实现,如果第一个参数类型是string则直接返回,否则返回参数之和

结尾

这篇文章针对TS中的函数进行了进阶的介绍,除了在之前文章中提到的函数定义及用法外,还介绍了函数参数的操作,返回值推断,函数重载

感谢你的阅读,希望文章对你有所帮助,有任何问题还望在评论区留言。

参考文章

函数(function) - TypeScript 中文手册

函数的类型 · TypeScript 入门教程


http://www.kler.cn/a/1215.html

相关文章:

  • 数据集-目标检测系列- 电话 测数据集 call_phone >> DataBall
  • C++的标准和C++的编译版本
  • 2025年XR行业展望:超越虚拟,融合现实
  • 上门按摩系统架构与功能分析
  • 基于LabVIEW的BeamGage自动化接口应用
  • esp32开发笔记之一:esp32开发环境搭建vscode+ubuntu
  • Leetcode138. 复制带随机指针的链表
  • 【十二天学java】day01-Java基础语法
  • HTTP报文数据检测与分类方案总结
  • 有趣且重要的JS知识合集(18)浏览器实现前端录音功能
  • Java中的二叉树
  • 【算法基础】二分图(染色法 匈牙利算法)
  • 【C语言进阶:刨根究底字符串函数】 strcmp 函数
  • 5、设备管理
  • SDIO读写SD卡速度有多快?
  • 「解析」牛客网-华为机考企业真题 1-20
  • 基于OpenCV+CUDA实时视频抠绿、背景合成以及抠绿算法小结
  • Ae:混合模式
  • HttpRunner3.x(1)-框架介绍
  • 蓝桥冲刺31天之317
  • 卷积神经网络CNN识别MNIST数据集
  • Navicat轻松操控MySQL数据库:从基础到高级操作全解析!
  • 2023年全国最新道路运输从业人员精选真题及答案26
  • 基于 pytorch 的手写 transformer + tokenizer
  • 重新学习Vue,了解一下Vue的故事和核心特点
  • 深度学习11. CNN经典网络 LeNet-5实现CIFAR-10