ts的函数

ts的Functions

大部分基础内容可以通过这篇blog学习👉Functions - TypeScript Deep Dive

函数类型TypeScript类型系统中扮演着非常重要的角色,它们是可组合系统的核心构建块.

1.Parameter annotations

你可以像变量注解一样,给function类型进行注解.

// variable annotation
let sampleVariable: { bar: number }// function parameter annotation
function foo1(sampleParameter: { bar: number }) { }let foo2 = (sampleParameter: { bar: number }) => {}

1.1剩余参数

const fn = (array:number[],...items:any):any[] => {console.log(array,items)return items
}console.log(fn([1,2,3],'J4ck',true));
/*
output:
[ 1, 2, 3 ] [ 'J4ck', true ]
[ 'J4ck', true ]
*/

1.2this参数

看起来有点像pythonself,只能写在参数列表第1个.

interface Obj {name: string// 限定getName调用时的this类型getName(this: Obj): string
}
const obj: Obj = {name: "J4ck",getName() {return this.name},
}
obj.getName() //output:J4ck

这样this就会指向调用getName()obj了.

2.Overloading

TypeScript中提供了函数重载的机制,不过这个重载其实从1个Javaer的角度来看感觉怪怪的。

实现一个padding()来举例,熟悉css的同学肯定知道padding支持好几种写法

.sample1 {/* 应用于所有边 */padding: 5px;
}.sample2 {/* 上边下边 | 左边右边 */padding: 5px 5px;
}.sample3 {/* 上边 | 右边 | 下边 | 左边 */padding: 5px 5px 5px 5px;
}

可以看到需要重载3个,因此需要声明4个function header,并且在声明最后1个function header后实现整个方法,这就是在我看来非常诧异的地方.

可以看到3个重载函数的实现逻辑都在最后1个function中,用if(parameter === undefind)这样的写法去判断传入了哪些parameter,并跳到对应的代码块中.

// Overloads
function padding(all: number);
function padding(topAndBottom: number, leftAndRight: number);
function padding(top: number, right: number, bottom: number, left: number);
// Actual implementation that is a true representation of all the cases the function body needs to handle
function padding(a: number, b?: number, c?: number, d?: number) {if (b === undefined && c === undefined && d === undefined) {b = c = d = a;}else if (c === undefined && d === undefined) {c = a;d = b;}return {top: a,right: b,bottom: c,left: d};
}

TypeScript 中的函数重载没有任何运行时开销。它只允许你记录希望调用函数的方式,并且编译器会检查其余代码。

不过这只是举1个例子,其实对于能够使用可选参数实现的function并不推荐使用函数重载

通过查阅一些资料,我自己总结了一下.

  1. TypeScript因为可选参数的存在,所以在参数列表涉及数量多少的,可以用可选参数实现。
function padding(all: number);
function padding(topAndBottom: number, leftAndRight: number);
//=========================//
function padding(a: number, b?: number);
  1. 参数列表里参数类型不同的时候,可以使用函数重载实现.
function showName(name:string): string;
function showName(names:string[]): string[];
function showName(names: unknown): unknown{if (typeof names === 'string') {return `${names}`;} else if (Array.isArray(names)) {return names.map(name => `${name}`);}
}console.log(showName('J4ck'));   //output:J4ck
console.log(showName(['J4ck','Ju11y']));   //output:[ 'J4ck', 'Ju11y' ]

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

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

相关文章

scrapy爬取图片

文章目录 ImagesPipeline使用步骤:1. 数据解析: 获取图片的地址 & 2. 将存储图片地址的item提交到指定的管道类(hotgirls.py)3. 在管道文件中自制一个基于ImagesPipeLine的一个管道类!!天大的坑 &#…

ChatGPT Prompting开发实战(十二)

一、如何开发prompts实现个性化的对话方式 通过设置“system”和“user”等roles,可以实现个性化的对话方式,并且可以结合参数“temperature”的设定来差异化LLM的输出内容。在此基础上,通过构建一个餐馆订餐对话机器人来具体演示对话过程。…

git你学“废”了吗?——git撤销操作指令详解

git你学“废”了吗?——git撤销操作指令详解😎 前言🙌撤销的本质撤销修改情况一:撤销工作区的修改方式一:方式二:演示截图: 撤销修改情况二:撤销暂存区和工作区的修改操作截图&#…

为什么字节大量用GO而不是Java?

见字如面,我是军哥。 我看很多程序员对字节编程语言选型很好奇,为此我还特地问了在字节的两位4-1的技术大佬朋友,然后加上自己的思考,总结了一下就以下 2 个原因: 1、 选型上没有历史包袱 字节的早期的程序员大多来自于…

条件控制

章节目录: 一、简单的示例二、条件测试三、if 语句四、使用 if 语句处理列表五、结束语 一、简单的示例 cars [audi, bmw, subaru, toyota]for car in cars:if car bmw:print(car.upper())else:print(car.title())# Audi# BMW# Subaru# Toyota二、条件测试 每条 …

流程建模艺术:使用Activiti设计流程

流程建模艺术:使用Activiti设计流程 前言流程相关定义一个流程启动一个流程删除一个流程 方法相关创建流程校验流程模型是否合法获取当前人的待办查询候选任务删除历史流程获取未完成的历史流程实例列表获取已完成的历史任务实例列表根据业务id查询历史活动实例 前言…

CISSP学习笔记:PKI和密码学应用

第七章 PKI和密码学应用 7.1 非对称密码学 对称密码系统具有共享的秘钥系统,从而产生了安全秘钥分发的问题非对称密码学使用公钥和私钥对,无需支出复杂密码分发系统 7.1.1 公钥与私钥 7.1.2 RSA(兼具加密和数字签名) RSA算法…

[论文笔记]UNILM

引言 今天带来论文Unified Language Model Pre-training for Natural Language Understanding and Generation的笔记,论文标题是 统一预训练语言模型用于自然语言理解和生成。 本篇工作提出了一个新的统一预训练语言模型(Unifield pre-trained Language Model,UniLM),可以同…

debian 安装matlab2022b报错解决方法与问题解决思路

报错 terminate called after throwing an instance of ‘std::runtime_error’ 在安装目录执行 ./bin/glnxa64/MATLABWindow通过执行以上命令发现是和libharfbuzz库有关。 该库在调用freetype库时,有方法找不到。 偿试remove freetype库,发现该库有大…

Linux基本操作符(2)

W...Y的主页 😊 代码仓库分享 💕 关于Linux的操作符,在上篇博客中我们已经讲述了一些,都是Linux最基本的操作符。今天我们继续了解一些关于对文件及目录增删查改的操作符,话不多说我们直接上内容。 目录 rm指令的回…

Git/GitHub/Idea的搭配使用

目录 1. Git 下载安装1.1. 下载安装1.2. 配置 GitHub 秘钥 2. Idea 配置 Git3. Idea 配置 GitHub3.1. 获取 GitHub Token3.2. Idea 根据 Token 登录 GitHub3.3. Idea 提交代码到远程仓库3.3.1. 配置本地仓库3.3.2. GitHub 创建远程仓库1. 创建单层目录2. 创建多层目录3. 删除目…

大数据-玩转数据-Flink Sql 窗口

一、说明 时间语义,要配合窗口操作才能发挥作用。最主要的用途,当然就是开窗口然后根据时间段做计算了。Table API和SQL中,主要有两种窗口:分组窗口(Group Windows)和 含Over字句窗口(Over Win…

卤制品配送经营商城小程序的用处是什么

卤制品也是食品领域重要的分支,尤其对年轻人来说,只要干净卫生好吃价格合理,那复购率宣传性自是不用说,而随着互联网发展,传统线下门店也须要通过线上破解难题或进一步扩大生意。 而商城小程序无疑是商家通过线上私域…

字符串函数与内存函数讲解

文章目录 前言一、字符串函数1.求字符串长度strlen 2.长度不受限制的字符串函数(1)strcpy(2)strcat(3)strcmp 3.长度受限制的字符串函数(1)strncpy(2)strncat(3)strncmp 4.字符串查找(1)strstr(2)strtok 5.错误信息报告(1)strerror(2)perror 二、内存函数1.memcpy2.memmove3.me…

Neural Networks for Fingerprint Recognition

Neural Computation ( IF 3.278 ) 摘要: 在采集指纹图像数据库后,设计了一种用于指纹识别的神经网络算法。当给出一对指纹图像时,算法输出两个图像来自同一手指的概率估计值。在一个实验中,神经网络使用几百对图像进行训练&…

第 365 场 LeetCode 周赛题解

A 有序三元组中的最大值 I 参考 B B B 题做法… class Solution { public:using ll long long;long long maximumTripletValue(vector<int> &nums) {int n nums.size();vector<int> suf(n);partial_sum(nums.rbegin(), nums.rend(), suf.rbegin(), [](int x…

golang工程——protobuf使用及原理

相关文档 源码&#xff1a;https://github.com/grpc/grpc-go 官方文档&#xff1a;https://www.grpc.io/docs/what-is-grpc/introduction/ protobuf编译器源码&#xff1a;https://github.com/protocolbuffers/protobuf proto3文档&#xff1a;https://protobuf.dev/programmin…

加入PreAuthorize注解鉴权之后NullPointerException报错

记录一次很坑的bug&#xff0c;加入PreAuthorize注解鉴权之后NullPointerException报错&#xff0c;按理来说没有权限应该403报错&#xff0c;但是这个是500报错&#xff0c;原因是因为controller层的service注入失败&#xff0c;然而我去掉注解后service注入成功&#xff0c;并…

使用VSCODE 调试ros2具体设置

vscode 调试 ROS2 张得帅&#xff01; 于 2023-09-09 15:39:39 发布 456 收藏 1 文章标签&#xff1a; vscode ros2 版权 1、在下列目录同层级找到.vscode文件夹 . ├── build ├── install ├── log └── src 2、 安装ros插件 3、创建tasks.json文件&#xff0c;添…

二十七、[进阶]MySQL默认存储引擎InnoDB的简单介绍

1、MySQL体系结构 MySQL大致可以分为连接层、服务层、引擎层、存储层四个层&#xff0c;这里需要注意&#xff0c;索引的结构操作是在存储引擎层完成的&#xff0c;所以不同的存储引擎&#xff0c;索引的结构是不一样的。 &#xff08;1&#xff09;体系结构示意图 &#xff0…