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

TypeScript 泛型的概念和基本使用

什么是TypeScript 泛型?

  • 在定义函数,接口,类的时候不能预先确定使用的数据类型,而是在调用使用这些函数,接口,类的时候才能确定的数据类型;

1,单个泛型的参数

例如通过使用any这种方式,value1的类型随着传入的类型数据而变化:

function myfunction01(value1: any, value2: number): any[]{let arr: any[] = [value1, value2]return arr
}
myfunction01('123456', 111);
myfunction01(123456, 111);

改为泛型之后:

function myfunction01<T>(value1: T, value2: T): T[]{// let arr: T[] = [value1, value2]let arr: Array<T> = [value1, value2]return arr
}
myfunction01<string>('123456', '1111');
myfunction01<number>(123456, 111);

2,多个泛型的参数

function myfunction01<T, X>(value1: T, value2: X): [T, X]{return [value1, value2]
}
myfunction01<string, number>('123456', 1111);

3,泛型接口

泛型接口:接口也可以配合泛型来使用,以增加其灵活性,增强其复用性

interface 接口名<类型变量1,类型变量2> {变量:类型变量1,变量:类型变量2
}

使用:

interface MyArray<T> {length: T,data:string[]push(n: T): T,pop(): void,reverse(): T[]
}
const obj: MyArray<number> = {length: 11,push (o){ return o },pop: function () {},reverse: () => [1, 2],data: ['1', '1']
}
  1. 在接口名称的后面添加 <类型变量>,那么,这个接口就变成了泛型接口。
  2. 接口的类型变量,对接口中所有其他成员可见,也就是接口中所有成员都可以使用类型变量。
  3. 使用泛型接口时,需要显式指定具体的类型。

4,泛型工具类型

泛型工具类型:TS 内置了一些常用的工具类型,来简化 TS 中的一些常见操作

说明:它们都是基于泛型实现的(泛型适用于多种类型,更加通用),并且是内置的,可以直接在代码中使用。 这些工具类型有很多,先来学习以下3个:

① Partial

将一个对象类型中的所有属性变为可选属性;

type User = {id: number;name: string;age: number;
}
type UpdatedPerson = Partial<User>;

得到的 UpdatedPerson 类型与下面的类型定义是相同的:

type UpdatedPerson = {id?: number;name?: string;age?: number;
}

② Readonly

将Type 所有属性都设置为 readonly(只读)。

type Props =  {id: stringchildren: number[]
}
type ReadonlyProps = Readonly<Props>

构造出来的新类型 ReadonlyProps 结构和 Props 相同,但所有属性都变为只读的。不可修改

③ Pick

Pick<Type, Keys> 从 Type 中选择一组属性来构造新类型。

type Props = {id: stringtitle: stringchildren: number[]
}
type PickProps = Pick<Props, 'id' | 'title'>
  1. Pick 工具类型有两个类型参数:1 表示选择谁的属性 2 表示选择哪几个属性。 2. 其中第二个类型变量,如果只选择一个则只传入该属性名即可。
  2. 第二个类型变量传入的属性只能是第一个类型变量中存在的属性。
  3. 构造出来的新类型 PickProps,只有 id 和 title 两个属性类型。

相关文章:

TypeScript 泛型的概念和基本使用

什么是TypeScript 泛型&#xff1f; 在定义函数&#xff0c;接口&#xff0c;类的时候不能预先确定使用的数据类型&#xff0c;而是在调用使用这些函数&#xff0c;接口&#xff0c;类的时候才能确定的数据类型&#xff1b; 1&#xff0c;单个泛型的参数 例如通过使用any这种…...

redis的事务和watch机制

这里写目录标题 第一章、redis事务和watch机制1.1&#xff09;redis事务&#xff0c;事务的三大命令语法&#xff1a;开启事务 multi语法&#xff1a;执行事务 exec语法&#xff1a;取消事务 discard 1.2&#xff09;redis事务的错误和回滚的情况1.3&#xff09;watch机制语法&…...

objectMapper.getTypeFactory().constructParametricType 方法的作用和使用

在使用 Jackson 库进行 JSON 数据的序列化和反序列化时&#xff0c;经常会使用到 ObjectMapper 类。其中&#xff0c;objectMapper.getTypeFactory().constructParametricType 方法用于构造泛型类型。 具体作用和使用如下&#xff1a; 作用&#xff1a; 构造泛型类型&#x…...

【websocket - Tornado】简易聊天应用

1、背景 项目测试的过程中需要自己搭建一个webscoket站点,确保此类服务接入后台系统后访问不受影响。python的服务框架常用的有Flask、Django、Tornado,每个框架的侧重点不同,导致使用的场景就会有所差异。 Flask轻量级,采用常规的同步编程方式,需要安装其他模块辅助,主…...

TCP 三次握手,四次挥手

1、三次握手 第一次握手 SYN 等于1&#xff0c;SeqX 第二次握手 SYN等于1 ACK等于1&#xff0c;SeqY&#xff0c;AckX1 第三次SYN等于0 ACK等于1&#xff0c;SeqX1&#xff0c;AckY1 ackRow都是对应请求seqraw&#xff0c;三次握手后&#xff0c;Seq就是服务器前一个包中的ac…...

Nginx之Rewrite重定向

常见的Nginx正则表达式 ^&#xff1a;匹配输入字符串的起始位置 $&#xff1a;匹配输入字符串的结束位置 *&#xff1a;匹配前面的字符零次或多次。如“ol*”能匹配“o”及“ol”、“oll” &#xff1a;匹配前面的字符一次或者多次。如“ol”能匹配"ol"及“oll”、&q…...

uni-app微信小程序开发自定义select下拉多选内容篇

分享-2023年高级前端进阶&#xff1a;前端登顶之巅-最全面的前端知识点总结站点 *分享一个使用比较久的&#x1fa9c; 技术框架公司的选型&#xff1a;uni-app uni-ui vue3 vite4 ts 需求分析&#xff1a;微信小程序-uni-ui内容 1、创建一个自定义的下拉&#xff0c;支持多…...

VUE+view table.exportCsv()导出.csv文档时如何防止数据格式为科学计数

当使用table.exportCsv()方法导出数据时&#xff0c;出现科学计数法问题&#xff0c;像电话号码&#xff0c;身份证号码等&#xff0c;当数据大于15位后面的会用0替代。 针对这一问题&#xff0c;解决方法如下&#xff1a;就是再数字前加上制表符“\t”注意双引号&#xff0c;…...

Java基础练习六(排序)

排序 1. 第n大数 给定一个整数数组&#xff0c;输入一个值 n, 输出数组中第 n 大的数。 import java.util.Arrays; import java.util.Scanner;public class Work0801 {public static void main(String[] args) {int[] arr {2,3,1,8,3,9,6};// 冒泡排序,第n大数for (int i 0; …...

【Go】Go数据操作 - 处理JSON文件

目录 何为JSON 编码JSON 实践时刻 解码JSON 实践时刻 延伸拓展 何为JSON JSON (JavaScript Object Notation, JS对象简谱)是一种轻量级的数据交换格式。JSON最初是JavaScript的一部分&#xff0c;后由于便于快速编写的特性&#xff0c;被开发者独立出来。基本上所有的语…...

服务器之LNMP

lnmp的构成 L&#xff1a;linux系统,操作系统。 N&#xff1a;nginx网站服务&#xff0c;前端,提供前端的静态页面服务。同时具有代理,转发的作用。 转发&#xff1a;主要是转发后端请求。转发到PHP。nginx没有处理动态资源的功能,他有可以支持转发动态请求的模块。 M&…...

恒运资本:定向增发一般多久完成?

随着现代企业的不断发展壮大&#xff0c;企业需求的资金也越来越多&#xff0c;而定向增发成为了企业融资的一个不可或缺的方法之一。那么&#xff0c;定向增发一般需求多长时刻来完结呢&#xff1f;本文将从多个角度进行剖析&#xff0c;以期对此问题有更深化的了解。 一、 定…...

mysql进阶篇(二)

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 「推荐专栏」&#xff1a; ★java一站式服务 ★ ★ React从入门到精通★ ★前端炫酷代码分享 ★ ★ 从0到英雄&#xff0c;vue成神之路★ ★ uniapp-从构建到提升★ ★ 从0到英雄&#xff…...

考研C语言进阶题库——更新31-32题

目录 31.姜太公门前有一个池塘&#xff0c;他每天都会去池塘里面钓鱼&#xff0c;他钓鱼技术非常高&#xff0c;距离水面五米的深度之内&#xff0c;包括五米的鱼&#xff0c;他都能钓到池塘里面一共有n条鱼&#xff0c;给出每条鱼距离水面的高度&#xff0c;问姜太公一次能钓…...

机动车号牌正则表达式(兼容新能源车牌)

说明&#xff1a;“|”前面面是绿牌车&#xff08;8位&#xff09;规则&#xff0c;“|”后面是蓝牌车&#xff08;7位&#xff09;规则。 ([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领]A-Z)|(([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵…...

idea如何上传项目到github(超详细)

idea如何上传项目到github 1、IDEA配置2、项目上传到本地仓库2.1、创建本地git仓库2.2、Add操作2.3、Commit操作 3、项目上传到Github4、拿到登录Github的token 1、IDEA配置 File-Settings-VersionControl-Git Git的安装路径下bin目录下的git.exe可执行文件 可以直接点 Gene…...

护网专题简单介绍

护网专题简单介绍 一、护网红蓝队介绍1.1、网络安全大事件1.2、护网行动由来1.3、护网行动中的角色二、红队介绍2.1、红队所需技能2.2、红队攻击流程 三、蓝队介绍3.1、蓝队所需技能3.2、蓝队防守四阶段3.3、蓝队前期准备 四、常见安全厂商介绍4.1、常见安全厂商 五、常见安全产…...

GO学习之 网络通信(Net/Http)

GO系列 1、GO学习之Hello World 2、GO学习之入门语法 3、GO学习之切片操作 4、GO学习之 Map 操作 5、GO学习之 结构体 操作 6、GO学习之 通道(Channel) 7、GO学习之 多线程(goroutine) 8、GO学习之 函数(Function) 9、GO学习之 接口(Interface) 10、 文章目录 GO系列前言一、H…...

<dependency> idea中为什么这个变黄色

在IDE中&#xff0c;当你的代码出现黄色高亮时&#xff0c;通常表示存在警告或建议的提示。对于Maven的<dependency>标签来说&#xff0c;黄色高亮可能有以下几种原因&#xff1a; 依赖项未找到&#xff1a;黄色高亮可能表示IDE无法找到指定的依赖项。这可能是由于配置错…...

SA8000 社会责任要求之健康安全准则

【SA8000 社会责任要求之健康安全准则】 健康和安全 准则 3.1 组织应提供一个安全和健康的工作环境&#xff0c;并应采取有效的措施防止潜在的健康和安全事故和职业伤害&#xff0c;或在工作的过程中发生的或引起的疾病。基于产业相关的安全与健康的知识以及任何特定的危害&…...

Ai2Psd:跨软件矢量图形无损转换的技术突破

Ai2Psd&#xff1a;跨软件矢量图形无损转换的技术突破 【免费下载链接】ai-to-psd A script for prepare export of vector objects from Adobe Illustrator to Photoshop 项目地址: https://gitcode.com/gh_mirrors/ai/ai-to-psd 在数字设计工作流中&#xff0c;Adobe …...

SteamAutoCrack:DRM解除技术突破与效率提升解决方案

SteamAutoCrack&#xff1a;DRM解除技术突破与效率提升解决方案 【免费下载链接】Steam-auto-crack Steam Game Automatic Cracker 项目地址: https://gitcode.com/gh_mirrors/st/Steam-auto-crack SteamAutoCrack作为一款开源自动化工具&#xff0c;整合文件分析、DRM解…...

5个技巧彻底优化拯救者笔记本性能:开源工具箱终极指南

5个技巧彻底优化拯救者笔记本性能&#xff1a;开源工具箱终极指南 【免费下载链接】LenovoLegionToolkit Lightweight Lenovo Vantage and Hotkeys replacement for Lenovo Legion laptops. 项目地址: https://gitcode.com/gh_mirrors/le/LenovoLegionToolkit 联想拯救者…...

嵌入式FOC实战:从STM32到FPGA的电机控制精髓

1. 为什么需要FOC电机控制技术 第一次接触电机控制时&#xff0c;我被各种专业术语搞得晕头转向。直到亲手用STM32驱动一台伺服电机&#xff0c;才真正理解FOC&#xff08;磁场定向控制&#xff09;的价值。想象一下骑自行车&#xff1a;普通方波控制就像不断猛踩刹车和油门&a…...

Open-AutoGLM快速部署指南:10分钟搭建属于你的手机AI助手

Open-AutoGLM快速部署指南&#xff1a;10分钟搭建属于你的手机AI助手 1. 引言 想象一下&#xff0c;你只需要对手机说"打开微信&#xff0c;找到张三&#xff0c;给他发消息说明天见"&#xff0c;手机就能自动完成这一系列操作。这不是科幻&#xff0c;而是基于Ope…...

实时手机检测-通用开发者手册:修改webui.py自定义检测逻辑详解

实时手机检测-通用开发者手册&#xff1a;修改webui.py自定义检测逻辑详解 1. 引言&#xff1a;从“能用”到“好用”的跨越 如果你已经体验过实时手机检测-通用模型&#xff0c;通过那个简洁的Web界面&#xff0c;上传一张图片&#xff0c;点击按钮&#xff0c;就能看到被框…...

5分钟学会用PHPStudy搭建Pikachu靶场(含一句话木马实战)

5分钟实战&#xff1a;用PHPStudy快速搭建Pikachu靶场与一句话木马攻防演练 在网络安全领域&#xff0c;动手实践往往比理论阅读更能快速提升技能。本文将带您完成一次完整的本地环境搭建与基础渗透测试演练——从零开始配置PHPStudy环境、部署Pikachu靶场&#xff0c;到实战演…...

OpenClaw权限控制实战:千问3.5-35B-A3B-FP8敏感操作保护方案

OpenClaw权限控制实战&#xff1a;千问3.5-35B-A3B-FP8敏感操作保护方案 1. 为什么需要权限控制&#xff1f; 上周我在调试OpenClaw自动化脚本时&#xff0c;差点酿成一场"灾难"。当时想让AI助手帮我整理下载文件夹&#xff0c;结果一条模糊指令导致模型误删了三个…...

OpenClaw技能开发指南:为Phi-3-vision-128k-instruct定制多模态自动化流程

OpenClaw技能开发指南&#xff1a;为Phi-3-vision-128k-instruct定制多模态自动化流程 1. 为什么需要为特定模型开发OpenClaw技能&#xff1f; 去年夏天&#xff0c;我接手了一个数据分析项目&#xff0c;需要每周手动从上百张仪表盘截图里提取数字并整理成Excel报表。这种重…...

Windows下OpenClaw配置:对接Kimi-VL-A3B-Thinking多模态模型全记录

Windows下OpenClaw配置&#xff1a;对接Kimi-VL-A3B-Thinking多模态模型全记录 1. 为什么选择OpenClaw与Kimi-VL-A3B-Thinking组合 去年我在处理大量图文混合资料时&#xff0c;发现传统工具链存在明显的割裂感——文本分析用NLP模型&#xff0c;图像识别用CV模型&#xff0c…...