TypeScript-泛型

泛型(Generics)

指在定义接口,函数等类型的时候,不预先指定具体的类型,而在使用的时候再指定类型的一种特性,使用泛型可以复用类型并且让类型更加灵活

泛型接口-interface

语法:在 interface 接口类型的名称后面使用 <T> 即可声明一个泛型参数,接口里的其他成员都能使用该参数的类型

interface ResData<T> {}

效果:

思路:

1️⃣ 找到可变的类型部分通过泛型<T>抽象为泛型参数(定义参数)

// 定义泛型,把可变的部分抽象成泛型参数T
interface ResData<T> {code: numbermsg: stringdata:T
}

2️⃣ 在使用泛型的时候,把具体类型传入到泛型参数位置(传参)

// 定义具体类型,使用泛型的时候传入到参数的位置
interface User {name: stringage: number
}interface Goods {id: numbergoodName: string
}let User:ResData<User> = {code:200,msg:'success',data:{name: 'lili',age:18}
}
let Goods:ResData<Goods> = {code:200,msg:'success',data:{id: 1,goodName:'裙子'}
}
console.log(User)
console.log(Goods)

泛型别名type

语法:在类型别名type的后面使用<T>即可声明一个泛型参数,接口里的其他成员都能使用该参数的类型

type ResData<T> = {}
// 定义泛型,把可变的部分抽象成泛型参数T
type ResData<T> = {code: numbermsg: stringdata:T
}
// 定义具体类型,使用泛型的时候传入到参数的位置
type User = {name: stringage: number
}type Goods = {id: numbergoodName: string
}let User:ResData<User> = {code:200,msg:'success',data:{name: 'lili',age:18}
}
let Goods:ResData<Goods> = {code:200,msg:'success',data:{id: 1,goodName:'裙子'}
}
console.log(User)
console.log(Goods)

泛型函数

语法:在函数名称的后面使用<T>即可声明一个泛型参数,整个函数中(参数、返回值、函数体) 的变量都可以使用该参数的类型

function fn<T>(){}
// 泛型函数
function createArray<T>(length: number,value: T){let res = []for(let i = 0; i < length; i++) {res[i] = value}return res
}createArray<number>(3,100)
createArray<string>(3,'100')

泛型约束

作用:泛型的特点:灵活不确定;有时候泛型函数的内部需要访问一些特定类型的数据才有的属性,此时会有类型错误,需要通过泛型约束解决

interface LengthObj {length: number
}// 限制了obj身上必须y有length属性才能通过校验
function logLen1<T extends LengthObj>(obj: T){console.log(obj.length)
}logLen1({length: 10})
logLen1(['100'])

总结:

1️⃣ 泛型的好处是什么?

增加类型的 复用性 和 灵活性

2️⃣ 泛型实现的基本方法是什么?

找到类型不确定的类型部分,定义泛型参数
定义具体类型,传入泛型参数的位置

3️⃣ 泛型约束的作用是什么?

既可以保留泛型的灵活性,又做了特定的限制

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/14892.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI服务器连接解决方案领军企业Astera Labs宣布,将在台湾组建首个位于硅谷以外的Cloud-Scale Interop Lab

AI服务器连接解决方案领军企业Astera Labs宣布&#xff0c;将在台湾组建首个位于硅谷以外的Cloud-Scale Interop Lab&#xff0c;集结中国台湾制造商共同参与。据《工商时报》报道&#xff0c;Astera Labs将与台湾主要ODM客户紧密合作&#xff0c;预期广达、英业达、纬创资通、…

web前端的路径和Servlet注解开发

目录 在web前端的两种路径 绝对路径的两种写法 相对路径 相对路径进阶 使用注解开发Servlet 使用注解开发Servlet的注意事项 使用idea创建servlet模板 在web前端的两种路径 绝对路径的两种写法 1.带网络三要素 http://ip地址:端口号/资源路径 2.不带网络三要素 /资源路…

『哈哥赠书 - 53期』-『深入浅出 Spring Boot 3.x』

⭐️ 《深入浅出 Spring Boot 3.x》 ⭐️ 学习Spring Boot的必读之书 在 Java 后端开发领域&#xff0c;功能强大的 Spring 开源框架不仅是首选&#xff0c;也是事实上的标准。但由于 Spring 存在配置烦琐、部署不易、依赖管理困难等问题&#xff0c;因此基于 Spring 的快速开…

告别传统,拥抱未来——上门回收小程序引领变革

随着科技的飞速发展&#xff0c;我们生活的方方面面都在经历着前所未有的变革。在环保和可持续发展的背景下&#xff0c;传统的废品回收方式已经难以满足现代社会的需求。而上门回收小程序的出现&#xff0c;正以其便捷、高效的特点&#xff0c;引领着废品回收行业的变革。 一、…

【NLPl练习】Transformer起源与发展

Transformer总结 Transformer模型类别分为&#xff1a; 纯Encoder模型纯Decoder模型Encoder-Decoder模型 Transformer模型的本质是预训练语言模型&#xff0c;首先采用自监督学习的方式在大量生语料库上训练&#xff0c;无需人工标注。常用的预训练任务主要有以下两个&#xff…

力扣343 整数拆分 Java版本

文章目录 题目描述代码 题目描述 给定一个正整数 n &#xff0c;将其拆分为 k 个 正整数 的和&#xff08; k > 2 &#xff09;&#xff0c;并使这些整数的乘积最大化。 返回 你可以获得的最大乘积 。 示例 1: 输入: n 2 输出: 1 解释: 2 1 1, 1 1 1。 示例 2: 输…

Leedcode69:x的平方根_Java解法

Problem: 69. x 的平方根 题目描述思路解题方法复杂度Code 题目描述 给你一个非负整数 x &#xff0c;计算并返回 x 的 算术平方根 。 由于返回类型是整数&#xff0c;结果只保留 整数部分 &#xff0c;小数部分将被 舍去 。 注意&#xff1a;不允许使用任何内置指数函数和…

HCIP-Datacom-ARST自选题库__OSPF单选【80道题】

1.OSPFV2是运行在IPV4网络的IGP&#xff0c;OSPFV3是运行在IPV6网络的ICP&#xff0c;OSPFV3与OSPFv2的报文类型相同&#xff0c;包括Hello报文、DD报文、LSR报文、LSU报文和LSAck报文。关于OSPFv3报文&#xff0c;以下哪个说法是正确的 OSPFv3使用报文头部的认证字段完成报文…

NVIDIA Jetson AGX Orin虚拟显示器安装

NVIDIA Jetson AGX Orin虚拟显示器安装 ​ 在orin上使用过程中。由于没有连接显示屏导致无法正常使用远程桌面工具进行代码调试。可使用虚拟显示器解决上述问题。 1、安装远程桌面软件并进行相关配置 ​ 安装远程桌面软件参考各个远程桌面软件官网介绍。 2、开启界面共享 …

【LeetCode】数组——双指针法

1 双指针法 1.1 介绍 双指针法是一种常用的算法技巧&#xff0c;通常用于处理数组或链表中的问题。它使用两个指针&#xff0c;通常一个从数组的开始位置遍历&#xff0c;另一个从数组的末尾位置开始遍历&#xff0c;根据问题的不同&#xff0c;这两个指针可以同时移动&#…

oracle rownum分页出现重复数据

oracle rownum分页出现重复数据的情况&#xff1a; 一般情况是分组的字段不唯一导致的 解决办法: 原始sql&#xff1a;(错误的) SELECT *FROM (SELECT a.*, ROWNUM rFROM hospital_inpatient_medication aWHERE TO_CHAR(discharge_date,YYYY-MM-DD HH24:MI:SS) BETWEEN 20…

抖音跳转微信卡片制作教程 小白也能搞

实测可以正常跳转&#xff0c;很牛逼&#xff0c;给大家分享一下~ 这是我做出来抖音发出去的效果&#xff0c;大家会制作了可以去卖钱&#xff0c;市场上一个这个卡片都要卖50-200&#xff0c;很不错的&#xff01;&#xff01; https://pan.baidu.com/s/1xPmGAWPcbAp7eXg7Dc…

温故而知新-秒杀项目篇【面试复习】

温故而知新-秒杀项目篇【面试复习】 前言版权推荐温故而知新-论坛项目篇【面试】秒杀项目中注册模块怎么实现的&#xff1f;秒杀项目中登录模块怎么实现的&#xff1f;秒杀项目中显示登录用户信息怎么实现的&#xff1f;SessionStorage是什么?为什么不用session而用token什么是…

骨位深间距小模具镶件如何走水路?3D打印让一切简单

在模具制造领域&#xff0c;骨位深且间距小的模具镶件由于结构复杂&#xff0c;传统加工方法难以制造出符合要求的冷却水路&#xff0c;导致模具在注塑过程中容易产生热量积聚&#xff0c;进而引发烫伤、缩孔等不良。然而&#xff0c;随着3D打印技术的飞速发展&#xff0c;这些…

uniapp Vue2钉钉h5开发pdf无法预览的问题

有两种方案 1.通过kkfile后端服务调用&#xff0c;实现&#xff0c;后端部署服务&#xff0c;前端传递网络地址pdf //KKFILE_URL 是后端服务地址 export function kkfilePreview(url) {// 修改kkfile文件预览&#xff0c;需要进行base64编码return KKFILE_URL /onlinePreview…

迭代器 增强for循环

迭代器原理 简单来说,迭代器就是一种可以访问集合的方式&#xff0c;就像一个游标或者指针&#xff0c;可以逐一查看集合&#xff08;映射、列表&#xff09;中的元素。 想象一下你有一张清单&#xff0c;上面列着你需要做的事情&#xff0c;但是你只能一次看一项。迭代器就像…

[蓝桥杯 2019 省 A] 糖果

一.题目 题目描述 糖果店的老板一共有 M 种口味的糖果出售。 为了方便描述&#xff0c;我们将 M 种口味编号 1∼M。 小明希望能品尝到所有口味的糖果。 遗憾的是老板并不单独出售糖果&#xff0c;而是 K 颗一包整包出售。 幸好糖果包装上注明了其中 K 颗糖果的口味&#…

0基础学习Mybatis系列数据库操作框架——Mysql的Geometry数据处理之WKT方案

大纲 几何结构构建点点集合线线集合面面集合几何信息集合 TypeHandlerSQL操作写入操作读取操作完整XML Mapper测试代码建表SQL总结代码参考资料 WKT全称是Well-Known Text。它是一种表达几何信息的字符串内容。比如点可以用WKT表示为POINT (3 3)&#xff1b;线可以用WKT表示为L…

Playwright教程

Playwright简介 支持多数浏览器 在Chromium&#xff0c;Firefox和WebKit上进行测试。Playwright拥有适用于所有现代浏览器的完整API覆盖&#xff0c;包括Google Chrome和Microsoft Edge&#xff08;带有Chromium&#xff09;&#xff0c;Apple Safari&#xff08;带有WebKit&a…

【哈希映射 字符串 乘法原理】2227. 加密解密字符串

本文涉及知识点 哈希映射 字符串 乘法原理 LeetCode 2227. 加密解密字符串 给你一个字符数组 keys &#xff0c;由若干 互不相同 的字符组成。还有一个字符串数组 values &#xff0c;内含若干长度为 2 的字符串。另给你一个字符串数组 dictionary &#xff0c;包含解密后所…