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

TS学习05-泛型

泛型

目的:可重用性

支持当前数据类型,也支持未来的数据类型。

提供灵活的功能

无法创建泛型枚举和泛型命名空间。

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

使用any类型会导致这个函数可以接受任何类型的 arg参数,

丢失了一些信息:传入的类型与返回的类型应该时相同的。我们传入一个数字,任何类型的值都有可能被返回。

类型变量

一种特殊的变量

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

把 identity 函数叫做泛型

两种方法使用

定义泛型函数后,可以用两种方法使用

传入所有参数,包含类型参数-如:
let output = identity<string>('myString');

明确了 T 是 string 类型,并作为参数传给函数。

使用<>括起来

类型推论
let output = identity('myString')

类型推论帮助我们保持代码精简和高可读性。

使用泛型变量

function identity<T>(arg: T):T {console.log(arg.length)//报错return arg
}

使用泛型创建泛型函数时,必须把这些参数当做是任意或所有类型

因为 arg可能是任意类型,如果是数字的话是没有.length的 所以报错

  • 创建一个 T类型的数组作为参数的 泛型函数
function loggingIdentity<T>(arg: T[]) :T[] {console.log(arg.length)return arg
}

泛型类型

指泛型的接口,类似于 变量的类型

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

function identity<G>(arg:G) :G {return arg}
let myIdentity: <G>(arg:G) => G = identity

带有调用签名的对象字面量第一泛型函数

let myIdentity: {<t>(arg:t):t} = identity

第一个泛型接口

#接口
interface GeneratorIdentity{<a>(arg:a):a;
}
# 定义
let myIdentity: GenericIdentityFn = function <T>(arg: T): T {return arg
}
# 使用
console.log(indentity<string>('Ren'))
  • 泛型参数当作接口的一个参数,这样就清楚的知道使用的具体是那个泛型类型了
interface GeneratorIdentity<T> {(arg: T): T
}
function identity<T>(arg: T): T { return arg }
let myIdentity: GeneratorIdentity<number> = identity
console.log(myIdentity(111))

接口中,非泛型函数签名作为了泛型类型的一部分

当使用接口时需要传入一个类型参数来指定泛型类型

泛型类

泛型类看上去与泛型接口差不多。 泛型类使用( <>)括起泛型类型,跟在类名后面。

class Generator<T> {zeroValue: T;add: (x:T) => T
}
let instance = new Generator<number>()
instance.zeroValue = 0
instancs.add = function(x) {return x}

泛型类指的是实例部分的类型, 所以类的静态属性不能使用这个泛型类型

泛型约束

定义一个接口来描述约束条件, 使用接口和extends关键字来实现约束

interface lengthwise {length: number;
}
function loggingIdentity<T extends Lengthwise>(arg: T): T {console.log(arg.length)return arg
}
loggingIdentity(1)//报错
loggingIdentity({length: 1, name: 'Ren'})

在泛型约束中使用类型参数

let x = {a: 1, b: 2, c: 3, d: 4}
function getProperty<T, K extend keyof T>(obj: T, key: K) {return obj[key]
}
console.log(getProperty(x,'a'))
console.log(getProperty(x,'g'))

keyof

在泛型里使用类类型

没懂

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

相关文章:

TS学习05-泛型

泛型 目的&#xff1a;可重用性 支持当前数据类型&#xff0c;也支持未来的数据类型。 提供灵活的功能 无法创建泛型枚举和泛型命名空间。 function identity(arg: any): any { return arg }function identity<T>(arg: T) : T { return arg}使用any类型会导致这个函数可以…...

windos wsl2 docker unix:///var/run/docker.sock

解决方案 问题如下 rootDESKTOP-VM0J0I4:~# docker ps Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?启动下docker sudo service docker startcsdn 等风来不如迎风去 htp://t.csdn.cn/Gh365...

前端面试经典手写题

1、手写Promise class Promise2 {state "pending";callbacks [];constructor(fn) {fn(this.resolve.bind(this), this.reject.bind(this));}resolve(result) {if (this.state ! "pending") return;this.state "fullFilled";nextTick(() > …...

Tomcat 部署及优化

Tomcat概述 Tomcat 是 Java 语言开发的&#xff0c;Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器&#xff0c;是 Apache 软件基金会的 Jakarta 项目中的一个核心项目&#xff0c;由 Apache、Sun 和其他一些公司及个人共同开发而成。在中小型系统和并发访问用户不是很…...

Selenium入门详细教程+实例演示

目录 1.Selenium概述 1.1什么是Selenium 1.2Selenium的优势 1.3Selenium WebDriver原理 2.Selenium环境搭建 3.Selenium 简单示例 4.八大元素定位 4.1定位方式 4.2定位方式的用法 5.Selenium API 5.1WebDriver 常用 API 5.2WebElement 常用 API 5.3代码示例 6.元素等待机…...

ATFX汇评:美国7月CPI数据即将揭晓,市场预期将有所反弹

ATFX汇评&#xff1a;今日20:30&#xff0c;美劳工部将公布7月未季调CPI年率&#xff0c;前值为3%&#xff0c;预期值3.3%&#xff1b;同一时间公布7月未季调核心CPI年率&#xff0c;前值为4.8%&#xff0c;预期值持平&#xff1b;至8月5日当周初请失业金人数也将同时发布&…...

23、springboot日志使用入门-- SLF4J+Logback 实现(springboot默认的日志实现),日志打印到控制台及日志输出到指定文件

springboot日志使用入门 ★ 典型的Spring Boot日志依赖&#xff1a; spring-boot-start.jar -- spring-boot-starter-logging.jar (Spring Boot的日志包&#xff09;-- logback&#xff08;core、classic&#xff09;-- log4j-to-slf4j.jar-- jul-to-slf4j.jar就是springboo…...

【uniapp】 软键盘弹出后fixed定位被顶上去问题

问题描述 当手机设计的导航栏为fixed定位上去时&#xff0c;输入框获取焦点就会把顶部自定义的导航栏顶到上面去&#xff0c;如下图所示 解决办法 输入框设置 :adjust-position“false” <input type"text" :adjust-position"false" focus"i…...

HarmonyOS应用开发者基础认证考试题库

此博文为HarmonyOS应用开发者基础认证考试的最后的大考&#xff0c;要求100分取得90分方可获取证书、现将考试的题库进行分享&#xff0c;希望能帮到大家。但是需要注意的是&#xff0c;题库会不定时的进行题目删减&#xff0c;但是大概的内容是不会进行改变的。真心希望这篇博…...

FANUC机器人SRVO-105和SRVO-067故障报警原因分析及处理方法

FANUC机器人SRVO-105和SRVO-067故障报警原因分析及处理方法 如下图所示,公司的一台机器人在正常工作时突然报警SRVO-105门打开或紧急停止,同时还有SRVO-067 OHAL2报警(G:1 A:2),按Reset键无法消除报警, 那么遇到这种情况,首先,我们来看一下报警说明书上的解释: 首先…...

在vue中Antv G2 折线图如何添加点击事件获取折线上点的值

在项目中有个需求是点击折线图的点&#xff0c;获取当前点的信息&#xff0c;其它图形都可以参考相关的API获取到&#xff0c;但area做的折线图怎么都获取不到点击的信息&#xff0c;只能获取全部的信息&#xff0c;最终解决如下&#xff1a; 实现思路 用户的鼠标在折线图上移…...

深度学习中训练、推理和验证分别都是什么意思

在深度学习中&#xff0c;推理&#xff08;Inference&#xff09;、训练&#xff08;Training&#xff09;和验证&#xff08;Validation&#xff09;是三个关键概念&#xff0c;它们分别表示了不同的阶段和任务&#xff1a; 训练&#xff08;Training&#xff09;&#xff1a;…...

C语言规范

C语言规范 1.头文件 若包含了头文件aa.h&#xff0c;则就引入了新的依赖&#xff1a;一旦aa.h被修改&#xff0c;任何直接和间接包含aa.h代码都会被重新编译。如果aa.h又包含了其他头文件如bb.h&#xff0c;那么bb.h的任何改变都将导致所有包含了aa.h的代码被重新编译&#x…...

Express中间件

1.创建最基本的中间件 const express require(express); const send require(send);const app express()const mw function (req, res, next) {console.log(middleware);// 一定要调用next() 把流转关系交给下一个中间件或路由next() }app.listen(80, () > {console.l…...

124. 二叉树中的最大路径和

题目描述 二叉树中的 路径 被定义为一条节点序列&#xff0c;序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点&#xff0c;且不一定经过根节点。 路径和 是路径中各节点值的总和。 给你一个二叉树的根节点 root &…...

管理类联考——逻辑——论证逻辑——汇总篇——真题和典例——分析

分析 分析争论焦点题 199-2010-1-51——分析争论焦点题——论点争论模型 陈先生&#xff1a;未经许可侵入别人的电脑&#xff0c;就好像开偷来的汽车撞伤了人&#xff0c;这些都是犯罪行为。但后者性质更严重&#xff0c;因为它既侵占了有形财产&#xff0c;又造成了人身伤害…...

深度ip转换器:一键更换ip地址方法

很多网友问小编有关深度ip转换器怎么用&#xff1f;最新深度ip转换器手机版app&#xff1f;下面小编整理了深度ip转换器怎么修改ip地址的技巧和诀窍&#xff0c; 让我们来详细的了解一下深度id转换器&#xff0c; 一、深度ip转换器怎么用 1.深度ip转换器怎么用&#xff0c;深度…...

【TypeScript】类型断言-类型的声明和转换(五)

【TypeScript】类型断言-类型的声明和转换&#xff08;五&#xff09; 【TypeScript】类型断言-类型的声明和转换&#xff08;五&#xff09;一、简介二、断言形式2.1 尖括号语法2.2 as形式 三、断言类型3.1 非空断言3.2 肯定断言-肯定化保证赋值3.3 将任何类型断言为any3.4 调…...

行业追踪,2023-08-10

自动复盘 2023-08-10 凡所有相&#xff0c;皆是虚妄。若见诸相非相&#xff0c;即见如来。 k 线图是最好的老师&#xff0c;每天持续发布板块的rps排名&#xff0c;追踪板块&#xff0c;板块来开仓&#xff0c;板块去清仓&#xff0c;丢弃自以为是的想法&#xff0c;板块去留让…...

Nodejs下动态加载文件夹下的文件模块

个人博客 Nodejs下动态加载文件夹下的文件模块 个人博客&#xff0c;求关注&#xff0c;如果有不够清晰的&#xff0c;麻烦指出来&#xff0c;如果有很不正确的&#xff0c;多谢批评。 文章概叙 本文应用的场景是读取指定文件夹下面的所有文件&#xff0c;然后做操作&#…...

小米AI研发工程师(汽车架构)面试题精选:10道高频考题+答案解析(附PDF)

小米汽车AI研发简介 小米汽车作为小米集团“手机AIoT”战略的核心延伸,致力于打造智能电动汽车。小米汽车AI研发团队聚焦自动驾驶、智能座舱、车路协同等前沿领域,技术栈涵盖深度学习、计算机视觉、强化学习、大模型等。面试重点考察候选人AI算法基础、工程实践能力、以及对…...

Hunyuan-MT-7B应用案例:如何用它搭建企业内部多语言翻译平台

Hunyuan-MT-7B应用案例&#xff1a;如何用它搭建企业内部多语言翻译平台 1. 企业多语言翻译的痛点与解决方案 在全球化的商业环境中&#xff0c;企业经常面临多语言沟通的挑战。无论是跨国业务往来、多语言文档处理&#xff0c;还是内部员工交流&#xff0c;语言障碍都可能成…...

大模型智能体 (agent)简易流程介绍准

引言 在现代软件开发中&#xff0c;性能始终是衡量应用质量的重要指标之一。无论是企业级应用、云服务还是桌面程序&#xff0c;性能优化都能显著提升用户体验、降低基础设施成本并增强系统的可扩展性。对于使用 C# 开发的应用程序而言&#xff0c;性能优化涉及多个层面&#x…...

聊一聊 C# 中的闭包陷阱:foreach 循环的坑你还记得吗?诖

. GIF文件结构 相比于 WAV 文件的简单粗暴&#xff0c;GIF 的结构要精密得多&#xff0c;因为它天生是为了网络传输而设计的&#xff08;包含了压缩机制&#xff09;。 当我们用二进制视角观察 GIF 时&#xff0c;它是由一个个 数据块&#xff08;Block&#xff09; 组成的&…...

大数据开发学习Day10

一、Linux / Shell tee 双向输出 head/tail 日志查看 1. tee命令&#xff1a;从标准输入读取数据&#xff0c;同时输出到标准输出&#xff08;屏幕&#xff09; 和一个或多个文件 tee [选项] [文件...]-a, --append 追加到文件末尾&#xff0c;而不是覆盖 -i, --ignore-int…...

Windows环境下EMQX守护进程的自动化监控与恢复方案

1. 为什么需要EMQX守护进程监控方案 EMQX作为一款开源的MQTT消息中间件&#xff0c;在物联网和实时通信领域应用广泛。但在实际生产环境中&#xff0c;尤其是在Windows服务器上长期运行时&#xff0c;经常会遇到服务意外退出的情况。我自己在运维一个老旧项目时就深有体会——由…...

OpenLayers7实战速成:从零构建你的第一个WebGIS应用

1. 为什么选择OpenLayers7&#xff1f; 如果你正在寻找一个强大且免费的开源WebGIS开发库&#xff0c;OpenLayers7绝对值得考虑。作为一个长期从事地图开发的老兵&#xff0c;我见证了这个库从最初的复杂难用到现在的简洁高效。最新版本不仅性能大幅提升&#xff0c;API设计也更…...

AI服务网格不是Istio翻版!:必须重写的4个控制平面组件+2个数据面扩展接口(附开源PoC代码仓链接)

第一章&#xff1a;AI原生软件研发服务网格实践指南 2026奇点智能技术大会(https://ml-summit.org) AI原生软件不再仅是“运行AI模型的应用”&#xff0c;而是将模型训练、推理调度、数据闭环、可观测性与弹性扩缩深度融入服务生命周期的系统级范式。服务网格作为解耦通信逻辑…...

Step3-VL-10B Base版实战指南:Gradio界面源码解读+processing_step3.py定制化修改

Step3-VL-10B Base版实战指南&#xff1a;Gradio界面源码解读processing_step3.py定制化修改 1. 引言&#xff1a;从使用者到开发者 如果你已经用上了Step3-VL-10B的Web界面&#xff0c;上传图片、提问、获取回答&#xff0c;觉得这个多模态模型确实好用&#xff0c;那么恭喜…...

Zemax新手必看:从零开始设计808nm单透镜的完整流程(附BK7材料参数)

Zemax新手实战&#xff1a;808nm激光单透镜设计全流程与BK7材料深度解析 刚接触Zemax的光学设计新手往往会被各种参数设置和优化方法弄得晕头转向。本文将以808nm激光器常用的单透镜设计为例&#xff0c;手把手带你完成从理论计算到软件实操的全过程。不同于简单的教程复述&…...