TypeScript 函数类型 (二)

news2024/9/20 18:32:46

函数类型

函数有两种方式定义

  • 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.coloradmin.cn/o/1930918.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【初阶数据结构】3.单链表

文章目录 3.单链表3.1 概念与结构3.1.1 结点3.1.2 链表的性质3.1.3 链表的打印 3.2 实现单链表3.3 链表的分类3.4 单链表算法题3.4.1 移除链表元素3.4.2 反转链表3.4.3 链表的中间结点3.4.4 合并两个有序链表3.4.5 链表分割3.4.6 链表的回文结构3.4.7 相交链表3.4.8 环形链表I3…

Mysql解忧杂货铺

欢迎来到一夜看尽长安花 博客,您的点赞和收藏是我持续发文的动力 对于文章中出现的任何错误请大家批评指出,一定及时修改。有任何想要讨论的问题可联系我:3329759426qq.com 。发布文章的风格因专栏而异,均自成体系,不足…

面向对象七大原则

学习目标 了解面向对象七大原则基本概念。 在之后实践应用中,要给予七大原则去设计程序。 为什么有七大原则 七大原则总体要实现的目标是: 高内聚、低耦合。 使程序模块的可重复性、移植性增强。 高内聚低耦合 从类角度来看,高内聚低…

LTSPICE仿真电路:(二十)TVS管简单仿真

1.目的 目的很简单,就是为了更加了解TVS管,以及更加能记住他的特性,加深印象,原本是只打算仿真TVS管,后面做着做着,搞二极管伏安特性曲线的时候,发现稳压二极管和TVS管比较接近,索性…

解决 Vscode不支持c++11的语法

问题: 解决方案: 1、按 CtrlShiftP 调出命令面板,输入 C/C: Edit Configurations (UI) 并选择它。这将打开 C/C 配置界面 2、打开 c_cpp_properties.json 文件 3、编辑 c_cpp_properties.json 4、保存 c_cpp_properties.json 文件。 关闭并…

【HarmonyOS】关于鸿蒙消息推送的心得体会 (一)

【HarmonyOS】关于鸿蒙消息推送的心得体会(一) 前言 这几天调研了鸿蒙消息推送的实现方式,形成了开发设计方案,颇有体会,与各位分享。 虽然没做之前觉得很简单的小功能,貌似只需要和华为服务器通信&…

Java-寻找二叉树两结点最近公共祖先

目录 题目描述: 注意事项: 示例: 示例 1: 示例 2: 示例 3: 解题思路: 解题代码: 题目描述: 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科…

刷题日志——模拟专题(python实现)

模拟往往不需要设计太多的算法,而是要按照题目的要求尽可能用代码表示出题目的旨意。 以下是蓝桥杯官网模拟专题的选题,大多数比较基础,但是十分适合新手入门: 一. 可链接在线OJ题 饮料换购图像模糊螺旋矩阵冰雹数回文日期长草最…

R语言实现神经网络ANN

# 常用激活函数 # 自定义Sigmoid函数 sigmod <- function(x){return(1/(1exp(-x))) } # 绘制Sigmoid曲线 x <- seq(-10,10,length.out 100) plot(x,sigmod(x),type l,col blue,lwd 2,xlab NA,ylab NA,main Sigmoid函数曲线)# 自定义Tanh函数 tanh <- function(…

MYSQL——数据库基础和操作

1.创建数据库 CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [, create_specification] …] create_specification: [DEFAULT] CHARACTER SET charset_name [DEFAULT] COLLATE collation_name 说明&#xff1a; 1.大写的表示关键字 2. []是可选项 3. CHARACT…

读人工智能全传15意向立场

1. 物理立场 1.1. 可以解释一个实体行为 1.2. 在物理立场中&#xff0c;我们使用自然法则(物理、化学等)来预测系统的行为结果 1.3. 虽然物理立场在解释这种行为的时候非常有效&#xff0c;但无法应用于理解或者预测人类行为 1.3.1. …

RocketMQ源码学习笔记:消费者启动流程

这是本人学习的总结&#xff0c;主要学习资料如下 马士兵教育rocketMq官方文档 目录 1、前置知识1.1、pull和push型消费者1.2、消息CommitLog到ConsumeQueue1.3、自动创建的重试主题1.4、广播型消费和集群型消费中offset的存储位置 2、消费中的启动流程2.1、Preview2.2、校验&…

主流大数据调度工具DolphinScheduler之数据ETL流程

今天给大家分享主流大数据调度工具DolphinScheduler&#xff0c;以及数据的ETL流程。 一&#xff1a;调度工具DS 主流大数据调度工具DolphinScheduler&#xff0c; 其定位&#xff1a;解决数据处理流程中错综复杂的依赖关系 任务支持类型&#xff1a;支持传统的shell任务&a…

MBR40150FCT-ASEMI无人机专用MBR40150FCT

编辑&#xff1a;ll MBR40150FCT-ASEMI无人机专用MBR40150FCT 型号&#xff1a;MBR40150FCT 品牌&#xff1a;ASEMI 封装&#xff1a;TO-220F 批号&#xff1a;最新 最大平均正向电流&#xff08;IF&#xff09;&#xff1a;40A 最大循环峰值反向电压&#xff08;VRRM&a…

shell脚本——编程规范与变量

目录 一、shell脚本 1、shell脚本概述 2、shell脚本的应用场景 3、shell脚本的作用——命令解释器 二、Shell 脚本编程规范 1、用户登录Shell 2、shell脚本的构成 3、执行shell脚本 三、重定向与管道操作 1、重定向 1.1、交互式硬件设备 1.2、重定向操作 2、重定向…

php相关

php相关 ​ 借鉴了小迪安全以及各位大佬的博客&#xff0c;如果一切顺利&#xff0c;会不定期更新。 如果感觉不妥&#xff0c;可以私信删除。 默认有php基础。 文章目录 php相关1. php 缺陷函数1. 与2. MD53. intval()4. preg_match() 2. php特性1. php字符串解析特性2. 杂…

数据结构-C语言-排序(3)

代码位置&#xff1a;test-c-2024: 对C语言习题代码的练习 (gitee.com) 一、前言&#xff1a; 1.1-排序定义&#xff1a; 排序就是将一组杂乱无章的数据按照一定的规律&#xff08;升序或降序&#xff09;组织起来。(注&#xff1a;我们这里的排序采用的都为升序) 1.2-排序分…

从汇编层看64位程序运行——栈保护

大纲 栈保护延伸阅读参考资料 在《从汇编层看64位程序运行——ROP攻击以控制程序执行流程》中&#xff0c;我们看到可以通过“微操”栈空间控制程序执行流程。现实中&#xff0c;黑客一般会利用栈溢出改写Next RIP地址&#xff0c;这就会修改连续的栈空间。而编译器针对这种场景…

集合媒体管理、分类、搜索于一体的开源利器:Stash

Stash&#xff1a;强大的媒体管理工具&#xff0c;让您的影音生活井井有条- 精选真开源&#xff0c;释放新价值。 概览 Stash是一个专为个人媒体管理而设计的开源工具&#xff0c;基于 Go 编写&#xff0c;支持自部署。它以用户友好的界面和强大的功能&#xff0c;满足了现代用…