TypeScript — 泛型

前言:

        只是一篇学习笔记!!!

正文:

泛型:指在定义函数、接口或类的时候,不预先指定具体类型,而在使用的时候再指定类型。

//泛型函数
//需求:创建一个方法使返回值的类型与传入参数的类型相同
function getSameType<T>(value:T):T{return value
}
console.log(getSameType(<number> 2)) //在使用的时候要指明类型,其实可以不指明,ts会进行类型推断
console.log(getSameType(<string>'4'))

在使用泛型变量的时候,必须把这些变量当做任意或所有类型。

function getSameType<T>(value:T):number{return value.length //类型T上不存在属性“lebgth”
}
console.log(getSameType(<string>'123')) //即使在使用的时候指定的类型存在length属性,还是报错

 解决方案:(使用接口约束类型)

interface Itype{length:number
}
function getSameType<T extends Itype>(value:T):number{return value.length
}
getSameType(<string>'123')
getSameType(<Array<number>>[1,2,3])
getSameType(<number>123) //类型"number"的参数不能赋给类型"Itype"的参数

 定义接口:(在使用接口的时候指定类型)

方式一:
interface IArr{<T>(value:T,count:number):Array<T> //定义函数的格式
}
const getArr1:IArr = function <T>(value:T,count:number):T[]{}
方式二:
interface IArr<T>{(value:T,count:number):Array<T>
}
const getArr1:IArr<string> = function <T>(value:T,count:number):T[]{ //在使用接口的时候就要确定类型}
// 定义接口
interface Idata{id:number,title:string,content:string,createTime:string
}
interface Itest<T>{code:T,data:Idata,message:string
}
function responseFn<U>(arg:U,count:number):Itest<number>{ //在使用的时候要指定类型let newArr:U[] = []for(let i = 0; i<count;i++){newArr.push(arg)}console.log(newArr)return {code:200,data:{id:1,title:'test1',content:'test1',createTime:'2022-01-02'},message:'成功'}
}
let test1 = responseFn(<string>'2',2)
console.log(test1)
let test2 = responseFn(<number> 2 ,4)
console.log(test2)

 

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

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

相关文章

Qt自动形成父子关系的函数

在Qt中&#xff0c;父子关系对于对象的内存管理至关重要。当一个QObject派生的对象拥有一个父对象时&#xff0c;它会在父对象被销毁时自动被销毁。这种机制简化了内存管理&#xff0c;并防止了内存泄漏。以下是一些在Qt中常见的会自动形成父子关系的情况&#xff1a; 1. 构造函…

【LeetCode:LCR 077. 排序链表 + 链表】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

【HEC】HECRAS中的降雨边界

目录 说明HEC-RAS网格降雨模型与HEC-HMS的比较HECRAS 降雨边界2DArea降雨边界添加降水边界条件调整2D Flow Area特性添加入渗网格数据创建土地覆盖层创建土壤层创建入渗层指定几何图形关联具有空间变化的网格降水数据Point点数据Gridded网格化数据Constant恒定值蒸散和风数据

2024最新版JavaScript逆向爬虫教程-------基础篇之JavaScript混淆原理

目录 一、常量的混淆原理1.1 对象属性的两种访问方式1.2 十六进制字符串1.3 Unicode字符串1.4 字符串的ASCII码混淆1.5 字符串常量加密1.6 数值常量加密 二、增加 JS 逆向者的工作量2.1 数组混淆2.2 数组乱序2.3 花指令2.4 jsfuck 三、代码执行流程的防护原理3.1 流程平坦化3.2…

Audition处理音频文件背景音(保留人声)

音频文件背景音可以使用Adobe Audition进行处理&#xff0c;Adobe Audition的下载与安装见之前博客&#xff1a; Adobe Audition 2024 下载与安装-CSDN博客https://blog.csdn.net/xiaoxian666/article/details/138612837?spm1001.2014.3001.5502 一、选中一段不含人声的背景…

品牌舆情监测工作要怎么做?

一个负面舆论的传播&#xff0c;可能在短时间内对企业品牌形象造成巨大损害&#xff0c;甚至引发舆情危机。因此&#xff0c;如何有效地进行品牌舆情监测&#xff0c;成为企业不可忽视的问题。伯乐网络传媒多年网络公关、舆情监测经验&#xff0c;今天就来给大家分享一下。 一、…

探索C++的string:从基础到深入

文章目录 string类string类的接口string的常见构造string类对象的容量操作string类的遍历及访问操作string类对象的修改操作string类的非成员函数 总结 string类 C中的string类是一个非常重要的字符串处理工具&#xff0c;它提供了一种方便且灵活的方式来处理字符串。它位于标…

如何搭建定投组合

全股组合&#xff0c;适合能够承受50%波动的人群&#xff0c;组合中&#xff0c;股票基金比例最大可以达到100% 沪深300市盈率在12倍以下&#xff0c;本次定投买入100%沪深300指数基金 沪深300市盈率在12-15倍&#xff0c;本次定投买入75%比例的沪深300指数基金和25%比例的债券…

VTK数据的读写--Vtk学习记录1--《VTK图形图像开发进阶》

读和写操作是VTK可视化管线两端相关的类--Reader和Writer类 Reader:将外部数据读入可视化管线&#xff0c;主要步骤如下 s1:实例化Reader对象 s2:指定所要读取的文件名 s3:调用Update()促使管线执行 对应的Writer: s1:实例化Writer对象 s2输入要写的数据以及指定写入的文…

Kafk设计篇01(设计动机+持久化)

背景 本篇文章基于最新版本&#xff1a;kafka 3.7&#xff0c;其他版本的设计&#xff0c;请参考官网&#xff1a; https://kafka.apache.org/documentation/设计动机 任何组件都有它存在的必要&#xff0c;必然是要解决某一类问题的。我们来看看kafka设计的初衷如何。 kaf…

加密“发射台”:未来通信的新模式

随着区块链技术的飞速发展&#xff0c;加密“发射台”作为一种新兴的安全通信工具&#xff0c;正逐渐受到关注。本文将从专业角度深入探讨加密“发射台”的概念、原理、应用场景及其未来发展趋势&#xff0c;以期为读者提供有深度和逻辑性的思考。 一、加密“发射台”的概念与…

java ArrayList与LinkedList比较

为了详细说明ArrayList与LinkedList的特性和使用方法&#xff0c;下面我将分别展示如何使用这两个集合类&#xff0c;并通过简单的示例代码来体现它们的特点。 ### 1. ArrayList 示例 java import java.util.ArrayList; import java.util.List; public class ArrayListExampl…

自定义springboot启动环境

FROM openjdk:8-jre-alpine #镜像的制作人 LABEL MAINTAINER723557599qq.com ##定义环境变量RUN mkdir -p /opt/server/ ADD target/ujoined-boot-remote-api-0.0.1-SNAPSHOT.jar /opt/server/app.jar RUN #bash -c touch /opt/server/app.jar #设置环境变量&#xff08;程序运…

产品推荐 | 基于 Zynq UltraScale+ RFSoC 的iW-RainboW-G42M 核心板

01 产品概述 Xilinx Zynq UltraScale基于RFSoC的系统模块采用带有FFVF1760封装的Zynq ScaleRFSoC ZU49/ZU39/ZU29设备。RFSoC支持高达1.3GHz的Quad Cortex A53和高达533MHz的Dual Cortex R5F。SOM支持高达16通道的射频ADC2.5Gsps和16通道的RF DAC10Gsps&#xff0c;所有这些都…

使用nvm安装node.js过程

今天Jade尝试安装nvm&#xff0c;并使用命令安装node.js但是碰到了一些问题&#xff0c;在此作为学习记录分享出来。希望可以留下深刻的印象&#xff1a; 1、概念了解 nvm----- (Node.js version manager)是一个命令行应用&#xff0c;可以协助您快速地 更新、安装、使用、卸载…

鲁大师4月新机性能/流畅/AI/久用榜:骁龙中端双子星表现亮眼,接下来应该是中端机的主场

时间来到5月份&#xff0c;伴随着中考、高考以及暑假将至&#xff0c;以学生家庭为主力的暑期换机潮即将拉开序幕。同时&#xff0c;恰逢骁龙新中端芯片骁龙8s Gen3和7 Gen3的发布&#xff0c;一大批在性能上极具竞争力的中端机型也已经跃跃欲试&#xff0c;为这次的换机潮开始…

net7部署经历

1、linux安装dotnet命令&#xff1a; sudo yum install dotnet-sdk-7.0 或者直接在商店里安装 2、配置反向代理 127.0.0.1:5000》localhost 访问后报错 原因&#xff1a;数据表驼峰名&#xff0c; 在windows的数据表不区分大小写&#xff0c;但是在linux里面是默认区分的&…

java 已知当前时间 如何快速的得出近30天每天的时间

1、使用 Java 中的 LocalDate 类 import java.time.LocalDate; import java.time.format.DateTimeFormatter;public class Main {public static void main(String[] args) {// 获取当前日期LocalDate currentDate LocalDate.now();// 创建日期格式化器DateTimeFormatter form…

C++ | Leetcode C++题解之第75题颜色分类

题目&#xff1a; 题解&#xff1a; class Solution { public:void sortColors(vector<int>& nums) {int n nums.size();int p0 0, p2 n - 1;for (int i 0; i < p2; i) {while (i < p2 && nums[i] 2) {swap(nums[i], nums[p2]);--p2;}if (nums[i…

ESD静电问题 | 手持摄像头整改

【转自微信公众号&#xff1a;柯普伦科技】