当前位置: 首页 > 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...

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

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

魔兽争霸III终极优化指南:WarcraftHelper让你的游戏体验焕然一新

魔兽争霸III终极优化指南&#xff1a;WarcraftHelper让你的游戏体验焕然一新 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper WarcraftHelper是一款专为…...

Dev Containers实战:容器化开发环境配置与团队协作指南

1. 项目概述&#xff1a;一个容器化的开发环境定义仓库如果你和我一样&#xff0c;经常需要在不同的机器上切换工作&#xff0c;或者团队里有新成员加入&#xff0c;那么“环境配置”这件事&#xff0c;绝对能排进程序员最头疼问题的前三名。我经历过无数次这样的场景&#xff…...

外卖点餐连锁店餐饮生鲜奶茶外卖店内扫码点餐源码同城外卖校园外卖源码的扫码逻辑

&#x1f4f1; 扫码点餐系统 - 完整扫码逻辑 源码示例外卖点餐 | 连锁店 | 餐饮生鲜 | 奶茶 | 店内扫码点餐 | 同城外卖 | 校园外卖&#x1f3af; 扫码业务场景总览场景扫码后行为核心逻辑&#x1f37d;️ 店内扫码点餐进入店铺菜单页识别店铺ID → 加载菜单&#x1f3c3; 外卖…...

聊天机器人技能并行化框架设计与实现:提升响应效率的异步编程实践

1. 项目概述与核心价值最近在折腾一个挺有意思的开源项目&#xff0c;叫mvanhorn/clawdbot-skill-parallel。乍一看这个仓库名&#xff0c;又是“clawdbot”又是“skill-parallel”&#xff0c;感觉像是某种机器人或自动化工具。没错&#xff0c;这正是它的核心。简单来说&…...

降AI率软件9平台覆盖测评:嘎嘎降自研稳定vs套壳工具单平台!

降AI率软件9平台覆盖测评&#xff1a;嘎嘎降自研稳定vs套壳工具单平台&#xff01; 「支持知网维普」实际只能稳定降一个平台&#xff0c;这是怎么回事&#xff1f; 我是双学位本科生&#xff0c;毕业论文 3.5 万字。学校规定送知网做 AIGC 检测&#xff0c;但导师建议我自己…...

如何高效管理Zotero插件:一站式插件市场完整指南

如何高效管理Zotero插件&#xff1a;一站式插件市场完整指南 【免费下载链接】zotero-addons Zotero Add-on Market | Zotero插件市场 | Browsing, installing, and reviewing plugins within Zotero 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-addons 还在为…...

智能工厂能源监测管理平台解决方案

在某大型制造企业的生产园区&#xff0c;管理人员长期面临着一系列能源管理困境&#xff1a;由于厂区各个电表仍依赖人工抄录&#xff0c;数据滞后且易出错&#xff0c;导致管理层无法实时掌握每条生产线甚至每台关键设备的真实耗电情况&#xff1b;同时&#xff0c;由于电表分…...

Instructure 向 Canvas 黑客支付赎金,数据虽归还但支付风险引担忧

Instructure 向 Canvas 黑客支付赎金&#xff0c;数据归还但支付风险引担忧 2026 年 5 月 11 日消息&#xff0c;Instructure 已向一群网络犯罪分子支付了赎金。在过去一周半的时间里&#xff0c;这群犯罪分子两次攻击了该公司的学习管理系统 Canvas。 根据这家教育技术公司周一…...

Redis优化与Redis Stack

一 性能优化&#xff1a;让Redis跑得更快、更稳内存淘汰策略&#xff1a;Redis内存满了怎么删数据&#xff1f;推荐用volatile-lru&#xff08;优先删最近最少用、且设了过期时间的key&#xff09;&#xff0c;避免内存溢出。系统内核优化&#xff1a;vm.swappiness1&#xff1…...