TypeScript 函数类型 (二)

函数类型

函数有两种方式定义

  • function 关键字来定义函数
function a(){}
  • 表达式定义(箭头函数的形式)
const a=()=>{}

函数需要定义类型的有三个地方 入参返回值 以及 函数本身 的类型, 函数本身的类型常用于表达式定义的函数

function sum(a:string,b:string):string{return a+b
}
let sum1 = (a:string,b:string): string => {return a+b
}type sum1Type = (a:string,b:string)=> string
let sum2: sum1Type = (a:string,b:string): string => {return a+b
}

类型推导

根据返回值类型推导

function f(a:string,b:string) {return a+b
}

在这里插入图片描述

根据上下文推导,根据位置来进行推导,也就是 x 对应入参 a 的类型,y对应b的类型,

type ISum = (x:string,y:string)=> string;
let sum3:ISum = (a,b) => {return a+b
}

在这里插入图片描述
入参数量可以比类型中的数量少,更具位置一一对应,但是不能多

函数返回类型

函数返回类型可以为void,意思为不校验返回值,在某些时候函数有没有返回值是没有意义的。

type ICallback = (a:string,b:number)=> void
function fn(callback:ICallback) {}
fn((a,b) => {return '1'
})

在这里插入图片描述

函数可选参数

在入参后面增加?,可以将这个入参变为可选,但是只能用在入参最后。

let sum4 = (a:string,b:string,c?:string):string => {return a+b
}
sum4('3','7')

在这里插入图片描述

函数剩余参数

剩余运算符 ...,可以传入不指定数量的参数

let total = (a:string,b:string,...rest:string[]): string => {return a+b+rest.join('')
}
total('1','2','3','4','5')

在这里插入图片描述

获取类型的内置方法

  • typeof 获取变量类型
let person = {name: '123',age: 123
}
type PersonType = typeof person

在这里插入图片描述

  • keyof 获取索引类型只能查询类型
type PersonKeyType = keyof typeof person

在这里插入图片描述

ts中this需要手动指定。默认是函数的第一个参数

let person = {name: '123',age: 123
}
type PersonType = typeof person
type PersonKeyType = keyof typeof person
function getV(this: PersonType, key: PersonKeyType ) {return this[key]
}
let r = getV.call(person, "name")

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

函数重载

重载 根据不同的参数类型做不同处理,一般这个参数类型是有限的。ts中的重载是伪重载,只是类型重载,不是逻辑重载

function toArray(value: string | number){if (typeof value ==='string') {return value.split('')}if (typeof value === 'number') {return value.toString().split('')}
}
let arr = toArray('123')

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/378402.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用AI生成Springboot单元测试代码太香了

你好,我是柳岸花开。 在当今软件开发过程中,单元测试已经成为保证代码质量的重要环节。然而,编写单元测试代码却常常让开发者头疼。幸运的是,随着AI技术的发展,我们可以利用AI工具来自动生成单元测试代码,极…

Java小白入门到实战应用教程-开发环境搭建-IDEA2024安装激huo详细教程

writer:eleven 安装IDEA2024 一、下载IDEA 推荐大家去官网下载 我这里也给大家直接准备了安装包,和激huo教程,大家可以自行下载使用。 注意:激huo教程只用于学习交流,不可商用。 IDEA2024安装包及激huo教程 说明&#xff1a…

php随机海量高清壁纸系统源码,数据采集于网络,使用很方便

2022 多个分类随机海量高清壁纸系统源码,核心文件就两个,php文件负责采集,html负责显示,很简单。做流量工具还是不错的。 非第三方接口,图片数据采集壁纸多多官方所有数据! 大家拿去自行研究哈&#xff0…

LabVIEW机器学习实现外观检测

介绍如何利用LabVIEW平台结合机器学习技术实现对被测样品的外观检测。详细说明了硬件选择、算法使用、操作步骤以及注意事项。 硬件选择 工业相机:高分辨率工业相机(如Basler、FLIR等)用于采集样品的图像。 照明设备:均匀的LED照…

Missing script:‘dev‘

场景: npm run dev 原因:没有安装依赖,可用镜像安装(详见下图ReadMe 蓝色字体),没安装依赖可从package-lock.json文件是否存在看出,存在则有依赖 解决:

封装网络请求 鸿蒙APP HarmonyOS ArkTS

一、效果展示 通过在页面直接调用 userLogin(params) 方法,获取登录令牌 二、申请网络权限 访问网络时候首先需要申请网络权限,需要修改 src/main 目录下的 module.json5 文件,加入 requestPermissions 属性,详见官方文档 【声明权…

【2024】VsCode + Latex + Linux(Ubuntu) + wsl环境下配置教程 | 包含 中文配置,和 格式化处理

前言 本篇教程是针对WSL下的Ubuntu操作系统的配置教程,它和一般的Linux环境下的配置有所不同,并且和Windows环境下的也有所不同。 本篇博客编写参考了 官方文档(Tex) 和 插件官方(Texlive Workshop) 文档…

沙袋装袋机的原理和特点_鼎跃安全

在现代工业和建筑领域,沙子等散状物料的包装是一个必不可少的环节。传统的手工包装方式效率低下且劳动强度大,而沙袋装袋机的出现则极大地提高了包装效率和质量。 一、沙袋装袋机的工作原理 沙子通过输送系统从储料仓输送到装袋机的料斗中。输送系统设计…

Win10+Docker环境使用YOLOv8 TensorRT推理加速

这一部分内容和WSL-Ubuntu20.04环境使用YOLOv8 TensorRT推理加速-CSDN博客 是基本相同的,有细微差别我也会在文中指出来。 1.TensorRTX下载 这里使用Wang-xinyu大佬维护的TensorRTX库来对YOLOv8进行推理加速的演示,顺便也验证一下前面环境配置的成果。 github地址:GitHub -…

C++初学者指南-5.标准库(第一部分)--容器遍历

C初学者指南-5.标准库(第一部分)–容器遍历 文章目录 C初学者指南-5.标准库(第一部分)--容器遍历前向遍历基于范围的循环for_each / for_each_n迭代器的显式使用基于索引的循环 逆向遍历反向范围循环(C20)反向 for_each / for_each_n反向迭代器的显式使用基于索引的反向循环…

本地部署,APISR: 动漫超分辨率技术

目录 引言 技术背景 APISR 的架构与原理 APISR 的主要特点 应用实例 本地部署 运行结果 结论 参考文献 GitHub - Kiteretsu77/APISR: APISR: Anime Production Inspired Real-World Anime Super-Resolution (CVPR 2024)APISR: Anime Production Inspired Real-World A…

Why can‘t I access GPT-4 models via API, although GPT-3.5 models work?

题意:为什么我无法通过API访问GPT-4模型,尽管GPT-3.5模型可以工作? 问题背景: Im able to use the gpt-3.5-turbo-0301 model to access the ChatGPT API, but not any of the gpt-4 models. Here is the code I am using to tes…

vue仿甘特图开发工程施工进度表

前言 本文是根据项目实际开发中一个需求开发的demo,仅用了elementUI,可当作独立组件使用,C V即用。 当然没考虑其他的扩展性和一些数据的校验,主要是提供一个处理思路,有需要的小伙伴可以直接复制;本demo的…

元服务体验-服务发现

服务发现,无论线上或线下的方式都可以发现元服务。 线上:基于用户意图。从精准意图的搜索、用户事件触发的推荐到主动探索等场景。用户可以在设备的负一屏、全局搜索、应用市场、桌面等场景发现元服务。 线下:用户在 HarmonyOS Connect标签…

C++ | Leetcode C++题解之第238题除自身以外数组的乘积

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<int> productExceptSelf(vector<int>& nums) {int length nums.size();// L 和 R 分别表示左右两侧的乘积列表vector<int> L(length, 0), R(length, 0);vector<int> answer(l…

Modbus转Ethernet/IP网关模块与汇川PLC通讯案例

Modbus转Ethernet/IP网关模块&#xff08;XD-MDEP100&#xff09;是一种用于将Modbus协议转换为Ethernet/IP协议的设备。它可以将Modbus RTU和Modbus TCP两种不同格式的Modbus数据包转换为Ethernet/IP协议的数据包&#xff0c;实现不同厂家的设备之间的数据交换和共享。在汇川P…

解决elementUI列表的疑难杂症,排序显示错乱的问题

大家好&#xff0c;在使用elementUI表格时&#xff0c;有时会出现一些意料之外的问题&#xff0c;比如数据排序正常但表格显示、排序错乱等。在网上搜索后一般有2种解决方法&#xff1a;1.给表格每一项的el-table-column添加唯一的id用于区分。2.给表格每一项的el-table-column…

案例 | 人大金仓助力山西政务服务核心业务系统实现全栈国产化升级改造

近日&#xff0c;人大金仓支撑山西涉企政策服务平台、政务服务热线联动平台、政务网、办件中心等近30个政务核心系统完成全栈国产化升级改造&#xff0c;推进全省通办、跨省通办、综合业务受理、智能审批、一件事一次办等业务的数字化办结进程&#xff0c;为我国数字政务服务提…

mybatis语法进阶1

日志的使用 我们在使用MyBatis的时候, 其实MyBatis框架会打印一些必要的日志信息, 在开发阶段这些日志信息对我们分析问题,理解代码的执行是特别有帮助的; 包括项目上线之后,我们也可以收集项目的错误日志到文件里面去; 所以我们采用专门的日志系统来处理. 步骤 导入坐标拷贝…

如何在SpringCloud中使用Kafka Streams实现实时数据处理

使用Kafka Streams在Spring Cloud中实现实时数据处理可以帮助我们构建可扩展、高性能的实时数据处理应用。Kafka Streams是一个基于Kafka的流处理库&#xff0c;它可以用来处理流式数据&#xff0c;进行流式计算和转换操作。 下面将介绍如何在Spring Cloud中使用Kafka Streams实…