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-泛型
泛型 目的:可重用性 支持当前数据类型,也支持未来的数据类型。 提供灵活的功能 无法创建泛型枚举和泛型命名空间。 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 语言开发的,Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器,是 Apache 软件基金会的 Jakarta 项目中的一个核心项目,由 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汇评:今日20:30,美劳工部将公布7月未季调CPI年率,前值为3%,预期值3.3%;同一时间公布7月未季调核心CPI年率,前值为4.8%,预期值持平;至8月5日当周初请失业金人数也将同时发布&…...
23、springboot日志使用入门-- SLF4J+Logback 实现(springboot默认的日志实现),日志打印到控制台及日志输出到指定文件
springboot日志使用入门 ★ 典型的Spring Boot日志依赖: spring-boot-start.jar -- spring-boot-starter-logging.jar (Spring Boot的日志包)-- logback(core、classic)-- log4j-to-slf4j.jar-- jul-to-slf4j.jar就是springboo…...
【uniapp】 软键盘弹出后fixed定位被顶上去问题
问题描述 当手机设计的导航栏为fixed定位上去时,输入框获取焦点就会把顶部自定义的导航栏顶到上面去,如下图所示 解决办法 输入框设置 :adjust-position“false” <input type"text" :adjust-position"false" focus"i…...
HarmonyOS应用开发者基础认证考试题库
此博文为HarmonyOS应用开发者基础认证考试的最后的大考,要求100分取得90分方可获取证书、现将考试的题库进行分享,希望能帮到大家。但是需要注意的是,题库会不定时的进行题目删减,但是大概的内容是不会进行改变的。真心希望这篇博…...
FANUC机器人SRVO-105和SRVO-067故障报警原因分析及处理方法
FANUC机器人SRVO-105和SRVO-067故障报警原因分析及处理方法 如下图所示,公司的一台机器人在正常工作时突然报警SRVO-105门打开或紧急停止,同时还有SRVO-067 OHAL2报警(G:1 A:2),按Reset键无法消除报警, 那么遇到这种情况,首先,我们来看一下报警说明书上的解释: 首先…...
在vue中Antv G2 折线图如何添加点击事件获取折线上点的值
在项目中有个需求是点击折线图的点,获取当前点的信息,其它图形都可以参考相关的API获取到,但area做的折线图怎么都获取不到点击的信息,只能获取全部的信息,最终解决如下: 实现思路 用户的鼠标在折线图上移…...
深度学习中训练、推理和验证分别都是什么意思
在深度学习中,推理(Inference)、训练(Training)和验证(Validation)是三个关键概念,它们分别表示了不同的阶段和任务: 训练(Training):…...
C语言规范
C语言规范 1.头文件 若包含了头文件aa.h,则就引入了新的依赖:一旦aa.h被修改,任何直接和间接包含aa.h代码都会被重新编译。如果aa.h又包含了其他头文件如bb.h,那么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. 二叉树中的最大路径和
题目描述 二叉树中的 路径 被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。 路径和 是路径中各节点值的总和。 给你一个二叉树的根节点 root &…...
管理类联考——逻辑——论证逻辑——汇总篇——真题和典例——分析
分析 分析争论焦点题 199-2010-1-51——分析争论焦点题——论点争论模型 陈先生:未经许可侵入别人的电脑,就好像开偷来的汽车撞伤了人,这些都是犯罪行为。但后者性质更严重,因为它既侵占了有形财产,又造成了人身伤害…...
深度ip转换器:一键更换ip地址方法
很多网友问小编有关深度ip转换器怎么用?最新深度ip转换器手机版app?下面小编整理了深度ip转换器怎么修改ip地址的技巧和诀窍, 让我们来详细的了解一下深度id转换器, 一、深度ip转换器怎么用 1.深度ip转换器怎么用,深度…...
【TypeScript】类型断言-类型的声明和转换(五)
【TypeScript】类型断言-类型的声明和转换(五) 【TypeScript】类型断言-类型的声明和转换(五)一、简介二、断言形式2.1 尖括号语法2.2 as形式 三、断言类型3.1 非空断言3.2 肯定断言-肯定化保证赋值3.3 将任何类型断言为any3.4 调…...
行业追踪,2023-08-10
自动复盘 2023-08-10 凡所有相,皆是虚妄。若见诸相非相,即见如来。 k 线图是最好的老师,每天持续发布板块的rps排名,追踪板块,板块来开仓,板块去清仓,丢弃自以为是的想法,板块去留让…...
Nodejs下动态加载文件夹下的文件模块
个人博客 Nodejs下动态加载文件夹下的文件模块 个人博客,求关注,如果有不够清晰的,麻烦指出来,如果有很不正确的,多谢批评。 文章概叙 本文应用的场景是读取指定文件夹下面的所有文件,然后做操作&#…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...
PHP和Node.js哪个更爽?
先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...
PL0语法,分析器实现!
简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...
如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...
分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...
