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

六、typescript泛型使用

1.identity函数,这个函数会返回任何传入它的值,可以看作是echo命令

function identity(arg:number):number
{return arg
}


使用any类型会导致这个函数可以接收任何类型的参数,这样会丢失一些信息,传入与返回类型应该是相同的 有特殊变量表示 类型变量:T

function  indentity(arg:any):any{
return arg
}function identity<T>(arg:T):T{return arg}

2.定义泛型函数,两种使用方法

  1. 使用 <>
let output = identity<string>('mystring'')
明确了T类型是string

2.类型推论–即编辑器会根据传入的参数自动确定T的类型

let output = identity('mystring')

3.使用泛型变量:

function indentity<T>(arg:T):T{console.log(arg.length) //error 有可能传入的是number没有length
}

4.可创建数组

function indentity<T>(arg:T[]):T[]{console.log(arg.length)
}
//或者
function indentity<T>(arg:Array<T>):Array<T>{}

5.泛型类型:
泛型函数的类型与非泛型函数的类型没有什么不同,只是一个类型参数在最前面

function indentity<T>(arg:T):T{return arg
}
let myIndent:<T>(arg:T)=>T=indetitylet myindent:<U>(arg:U)=>U=indentity  //不同的泛型参数名

6.泛型接口:

interface Fn{<T>(arg:T):T
}
function indent<T>(arg:T):T{return arg
}let myindent:Fn=indent

7.还可创建泛型类,注:无法创建泛型枚举和泛型命名空间
泛型类:指的是类的实例部分,所有类的静态属性不能使用这个泛型类

class Fn<T>{zeroValue:T;add:(s:T,y:T)=>T
}let fn1 = new Fn<number>()
fn1.zeroValue=0
fn1.add=function(x,y){return x+y}

8.泛型约束:

interface Length{length:number
}function indentity<T extends Length>(arg:T):T{console.log(arg.length)  //error//这个泛型函数已经被定义了约束,不宰适用于任意类型
}
//需要传入符合约束类型值,必须包括必须的属性
indentity({length:10,value:3})

9.在泛型约束中使用类型参数:

function obj(obj:T,key:K){return obj[key]
}let x = ['a','b','c']obj(x,'a')  //ok
obj(x,'aa')  //error a b c

10.在泛型里使用类类型:

function create<T>(c:{new() :T}):T{return new c()
}

相关文章:

六、typescript泛型使用

1.identity函数&#xff0c;这个函数会返回任何传入它的值&#xff0c;可以看作是echo命令 function identity(arg:number):number {return arg }或 使用any类型会导致这个函数可以接收任何类型的参数&#xff0c;这样会丢失一些信息&#xff0c;传入与返回类型应该是相同的 有…...

【快慢指针】26.删除有序数组中的重复项

题目 法1&#xff1a;快慢指针 基础解法&#xff0c;必须掌握&#xff01;&#xff01;&#xff01; class Solution {public int removeDuplicates(int[] nums) {if (nums.length < 2) {return nums.length;}int slow 0, fast 1;while (fast < nums.length) {if (n…...

爬虫工作量由小到大的思维转变---<第三十一章 Scrapy Redis 初启动/conn说明书)>

前言: 重点在读connection.py的源码,这个组件主要是用来连接的; 因为连接都无法做到,后面想更改点自定义就白扯了; 正文: 翻译版的connection.py源码: import sys import six from scrapy.utils.misc import load_object from . import defaults# 快捷方式映射 设置名称 -&…...

2023年山东省职业院校技能大赛高职组“软件测试”赛项-单元测试报告答案

任务四 单元测试 目录 任务四 单元测试 题目1: 题目2: 题目3:<...

Matlab论文插图绘制模板第133期—函数极坐标折线图

在之前的文章中&#xff0c;分享了Matlab函数折线图的绘制模板&#xff1a; 函数三维折线图&#xff1a; 函数网格曲面图&#xff1a; 函数曲面图&#xff1a; 函数等高线图&#xff1a; 函数等高线填充图&#xff1a; 进一步&#xff0c;再来分享一下函数极坐标折线图。 先来…...

如何用 GPT 去分析Excel数据

背景 需要尝试分析 Excel 的内容&#xff0c;每月都需要进行相关的分析&#xff0c;固定化流程&#xff0c;因此尝试制作固化的脚本&#xff0c;方便后续的分析。 执行步骤 帮我写一段 python 代码&#xff0c;我需要区分一个.xlsx的数据。格式示例如下&#xff1a; ”这块自…...

力扣labuladong一刷day51天单调栈应用

力扣labuladong一刷day51天单调栈应用 一、239. 滑动窗口最大值 题目链接&#xff1a;https://leetcode.cn/problems/sliding-window-maximum/ 思路&#xff1a;滑动窗口最大值&#xff0c;既要维护加入的时间顺序&#xff0c;又要 class Solution {public int[] maxSliding…...

单片机相关知识点

在STM32上运行FreeRTOS&#xff0c;十分简练的小文章FreeRTOS&#xff08;STM32CubeMX&#xff09;_cubemx freertos-CSDN博客...

009:vue结合el-table实现表格行拖拽排序(基于sortablejs)

文章目录 1. 实现效果2. 安装 sortablejs 插件3. 完整组件代码4. 注意点 1. 实现效果 2. 安装 sortablejs 插件 sortablejs 更多用法 cnpm i --save sortablejs3. 完整组件代码 <template><div class"home"><div class"body"><el-ta…...

C语言KR圣经笔记 5.3指针和数组 5.4地址运算

5.3 指针和数组 在 C 语言中&#xff0c;指针和数组有着非常强的关联&#xff0c;强到应当把两者同时拿出来讨论。任何可以通过数组下标来做到的操作&#xff0c;也都能用指针来做到。而指针的版本通常会更快&#xff0c;但至少对初学者来说会更难理解。 如下声明 int a[10]…...

设计模式:简单工厂模式、工厂方法模式、抽象工厂模式

简单工厂模式、工厂方法模式、抽象工厂模式 1. 为什么需要工厂模式&#xff1f;2. 简单工厂模式2.1. 定义2.2. 代码实现2.3. 优点2.4. 缺点2.5. 适用场景 3. 工厂方法模式3.1. 有了简单工厂模式为什么还需要有工厂方法模式&#xff1f;3.2. 定义3.3. 代码实现3.4. 主要优点3.5.…...

Could not load library libcudnn_cnn_infer.so.8

报错&#xff1a; Could not load library libcudnn_cnn_infer.so.8. Error: /root/miniconda3/lib/python3.10/site-packages/torch/lib/libcudnn_cnn_infer.so.8: undefined symbol: _ZNK10cask_cudnn14BaseKernelInfo18minorCCVCompatibleENS_8SafeEnumINS_47ComputeCapa…...

ELement UI时间控件el-date-picker误差8小时解决办法

一、问题描述&#xff1a; 在项目中引用了elementui中的date-picker组件&#xff0c;选中的时间跟实际相差八小时&#xff0c;且格式不是自己想要的格式 <el-date-pickertype"date"placeholder"选择日期"format"yyyy/M/d"v-model"form…...

Linux日志论转

系统日志、审计日志、诊断日志 日志系统rsyslog 日志管理基础: rsyslog 日志管理 logrotate日志轮转常见的日志文件 #tail -f /var/log/messages #动态查看日志文件的尾部&#xff0c;系统主日志文件#tail -f /var/log/secure #记录认证、安全的日志…...

第7课 利用FFmpeg将摄像头画面与麦克风数据合成后推送到rtmp服务器

上节课我们已经拿到了摄像头数据和麦克风数据&#xff0c;这节课我们来看一下如何将二者合并起来推送到rtmp服务器。推送音视频合成流到rtmp服务器地址的流程如下&#xff1a; 1.创建输出流 //初始化输出流上下文 avformat_alloc_output_context2(&outFormatCtx, NULL, &…...

Microsoft Visual Studio 2022 install Project 下载慢

1. 关闭Internet 协议版本6 2. 如果没有效果&#xff0c;打开Internet 协议版本4&#xff0c;更改DNS 3. 在浏览器中下载后安装&#xff0c;下载地址如下&#xff1a; Microsoft Visual Studio Installer Projects 2022 - Visual Studio Marketplace 4. 安装时注意关闭vs&…...

uniapp---安卓真机调试提示检测不到手机【解决办法】

最近在做APP&#xff0c;由于华为手机更新过系统&#xff0c;再次用来调试APP发现就不行了。下面给出具体的解决方法&#xff1a; 第一步&#xff1a;打开【允许开发人员选项】 找到【设置】点击【关于手机】找到【版本号】点击7次或多次&#xff0c;允许开发人员选项。 第二…...

Nginx(十四) 配置文件详解 - 负载均衡(超详细)

本篇文章主要讲ngx_http_upstream_module模块下各指令的使用方法。 1. upstream 上游服务器组/集群 Syntax: upstream name { ... } Default: — Context: http upstream指令定义了一个上游服务器组/集群&#xff0c;便于反向代理中的proxy_pass使用。服务器可以监听…...

大数据应用安全策略包括什么

大数据应用安全策略是为了保障大数据应用中的数据安全而采取的一系列措施&#xff0c;其重要性不容小觑。以下是大数据应用安全策略所包含的主要内容&#xff1a; 一、数据加密与安全存储 数据加密&#xff1a;对于敏感数据&#xff0c;应采用加密技术进行保护&#xff0c;包括…...

Ubuntu软件和vmware下载

https://cn.ubuntu.com/download/desktop VMware 中国 - 交付面向企业的数字化基础 | CN...

月薪8K到年薪80万!这个AI职位一年暴涨985%,普通人如何抓住风口?2026年最火爆的5个岗位+3条入场路径全解析!

文章讲述了AI Agent开发工程师的兴起&#xff0c;年薪可达80万。文章以小李的真实故事为例&#xff0c;展示了通过主动学习AI技术&#xff0c;可以实现职业的巨大转变。文章还分析了Agentic AI的特点及其对就业市场的影响&#xff0c;指出40%的岗位将被重新定义。文章列举了AI …...

山东大学项目实训(五)DebateLab—多智能体辩论与复盘平台

本周工作概述 日期&#xff1a;2026.5.13 本周主要完成了项目的两大核心基础设施建设&#xff1a;日志系统和Skill 系统。这两个系统是整个辩论 Agent 框架的重要支撑&#xff0c;为后续的功能扩展和系统稳定性奠定了坚实基础。一、日志系统建设 1.1 系统架构设计 日志系统采用…...

数据中心48V直连供电架构:从效率瓶颈到硬件设计实战

1. 数据中心供电演进&#xff1a;从香农理论到48V直连架构1948年&#xff0c;克劳德香农发表《通信的数学理论》&#xff0c;用1和0的二进制语言为信息时代奠基。六十八年后的今天&#xff0c;当我们谈论数据中心——这个承载着全球信息洪流的数字心脏时&#xff0c;讨论的焦点…...

如何利用co与Web Workers实现前端多线程异步编程:完整指南

如何利用co与Web Workers实现前端多线程异步编程&#xff1a;完整指南 【免费下载链接】co The ultimate generator based flow-control goodness for nodejs (supports thunks, promises, etc) 项目地址: https://gitcode.com/gh_mirrors/co/co co是一个基于生成器的No…...

2025届学术党必备的五大AI学术助手实测分析

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek AI论文工具在当代学术领域&#xff0c;已然成为了极为关键的辅助支撑力量&#xff0c;它可全…...

别再只会用555了!用继电器搭建LED闪烁电路的3个隐藏知识点(附电路图)

继电器驱动LED闪烁电路&#xff1a;超越555的三大物理奥秘与实战设计 在电子爱好者的世界里&#xff0c;LED闪烁电路就像"Hello World"之于程序员&#xff0c;是入门必修的第一课。大多数教程会引导初学者使用555定时器这种"标准化方案"&#xff0c;却很少…...

ARM微服务器与异构计算:从欧洲实验室到现代数据中心的演进

1. 项目概述&#xff1a;欧洲实验室里的微服务器“新酿”最近在整理资料时&#xff0c;翻到一篇2014年EE Times的老报道&#xff0c;讲的是当时欧洲几个由欧盟资助的微服务器项目。虽然时间过去快十年了&#xff0c;但里面探讨的一些架构思路和设计哲学&#xff0c;在今天看来依…...

别再写for循环了!用Java8的groupingBy,一行代码搞定员工按城市分组统计

告别繁琐循环&#xff1a;Java8 groupingBy在数据分组统计中的革命性应用 每次面对从数据库查询出的员工列表&#xff0c;需要按城市、部门或职级进行分组统计时&#xff0c;你是否还在写着重复的for循环&#xff1f;那些嵌套的if判断、临时变量和累加操作不仅让代码臃肿不堪&a…...

USB设备开发避坑指南:手把手教你读懂配置描述符的bmAttributes和bMaxPower

USB设备电源管理实战&#xff1a;深度解析配置描述符的bmAttributes与bMaxPower设计 当键盘突然在关键时刻失灵&#xff0c;或者医疗设备在手术中意外断电&#xff0c;背后往往隐藏着USB电源配置的致命错误。去年某知名外设厂商的召回事件&#xff0c;根源正是bMaxPower字段的2…...

混合信号示波器(MSO)在嵌入式调试中的核心应用与选型指南

1. 混合信号示波器&#xff1a;嵌入式调试的“瑞士军刀”如果你在2015年那个春天走进波士顿的嵌入式系统大会&#xff08;ESC Boston&#xff09;&#xff0c;会发现一个明显的趋势&#xff1a;工程师们调试板子的工具&#xff0c;正从传统的逻辑分析仪&#xff0c;悄然转向一种…...