【TS04——接口的多态——泛型接口】

news/2024/5/1 23:45:03/文章来源:https://blog.csdn.net/m0_46672781/article/details/127473996
  • 接口的多态,同一个方法,传入不同的参数,他所对应的操作不同成为多态【参数不同】
  • 或者可以理解为同一个方法,返回不同的结果,称之多态。
interface IfnPerson {run():voidrun(id:number):voidrun(id:number,name:string):void
}class Person implements IfnPerson{run():voidrun(id:number):voidrun(id:number,name:string):voidrun(id?:number,name?:string):void{console.log(id,name);   }
}const p  = new Person();
p.run()
p.run(12)
p.run(12,"wwqiew")
interface IfnPerson {run():voidrun(id:number):voidrun(id:number,name:string):void
}class Person implements IfnPerson{run():voidrun(id:number):voidrun(id:number,name:string):voidrun(id?:number,name?:string):void|string|number{if(arguments.length===0){return "没有参数"}else if(id as number>0 && name === undefined){return id;}else{return id as number+<string>name}}
}const p  = new Person();
p.run()
p.run(12)
console.log(p.run(12,"wwqiew"));

泛型:宽泛的类型,在定义时指占位,不确定类型,在调用时才给定类型。
定义一个函数或类时,在定义时还无法确定它参数或返回值是什么类型,这时可以用any或unknown来解决,当然也可以使用泛型定占位。

参数是任意类型,返回也是任意类型来规避,ts的类型检查。

function fn(arg:any):any{console.log(arg);return arg
}
fn(1)
fn("wqw")
fn(false)

泛型函数

在定义时不指定类型,返回时指定类型;

function fn<T>(arg:T):T{console.log(arg);return arg
}fn<string>("1")
fn<Array<string>>(["1","ok"])

实例化类——的函数

function fn<T>(classname:{new():T}){return new classname();
}
//箭头函数写法
//const fn = <T>(classname:{new() :T}):T=>new classname()
class A{}
class B{}
// 类也可以作为类型
let a = fn<A>(A);
let b = fn<B>(B);

泛型类型限制
定义一个泛型 类。

class  User<T>{private useList:T[] = []push = (value:T)=>{this.useList.push(value)}
}let user = new User<string>();user.push("a")console.log(user);//用接口来规范泛型类
interface Ic{id:number,name:string
}let user = new User<Ic>()
user.push({id:1,name:"niuniu"})console.log(user);

泛型是可以多个的。多个以逗号隔开。

class User<T,K>{name!:T;age!:K;constructor(name:T,age:K){this.age = age;this.name = name;}
}let user =new User("niuniu",25)

泛型也可以限制类型。
当前的T类型中一定要与在extends指定的父类型(接口)中得有此属性,没有那就嗝屁。

interface Ic{length:number
}function test<T extends Ic>(arg:T){console.log(arg.length);return arg.length
}test({length:123})
test<string>("wqewq")
test<number[]>([1,2])

在这里插入图片描述

// 条件交换
type Excludetype<T,K> = T extends K ? never:T
// 类型的范围限制
type Test = Excludetype<object|string,string|number|boolean>

泛型默认值

function test<T = number>(arg:T):number{return (arg as unknown as string).length
}
// 可以不写为自动类型
test("1")class Person<T=string,k=number>{name!:Tage!:k
}const p = new Person()

泛型接口

定义接口时,没有指定类型。
声明的时候去指定类型

interface Isum<T,K>{(a:T,b:K):void
}
const fn:Isum<number,string> = (a:number,b:string)=>{console.log(a,b);       
}

或者
给函数使用,在调用时给定类型

interface Isum{<T,K>(a:T,b:K):void
}const fn:Isum = <T,K>(a:T,b:K):void=>{console.log(a,b);       
}fn<number,string>(1,"2")

函数的协变和逆变

函数中返回值就是协变,函数形参就是逆变。
协变:类型是自己或子类
逆变:类型是自己或父类

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

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

相关文章

【生日快乐】Node.js 实战 第1章 欢迎进入Node.js 的世界 1.3 安装Node

Node.js 实战 文章目录Node.js 实战第1章 欢迎进入Node.js 的世界1.3 安装Node第1章 欢迎进入Node.js 的世界 1.3 安装Node 安装Node的最简单的方法是使用其官网上的安装程序。可以用对应Mac或 Windows的安装程序安装最新的当前版。 官网安装包下载地址&#xff1a;https://…

Jenkins部署详细教程

Jenkins简介 Jenkins 是一个可扩展的持续集成引擎。是一个自成一体的开源自动化服务器, 可用于自动化与构建、测试、交付或部署软件相关的各种任务; Jenkins是一个高度可扩展的产品, 其功能可以通过安装插件来扩展。 在gitlab里可以完成源代码的管理&#xff0c;但是对于研发…

[ACTF2020 新生赛]Exec1命令注入

1.来看题目如下 得到一个ping的输入框&#xff0c;老样子先检查网页源码看有没有什么好东西&#xff0c;得到一个链接&#xff0c;我们来访问一下 发现也没什么有用处的信息&#xff0c;于是看到题目的标题之后联想到了命令注入&#xff0c; 那么是怎么判断使用命令注入的呢&am…

MyBatis初步了解

1.Mybatis简介 1.1原始jdbc操作&#xff08;查询数据&#xff09; 1.2原始jdbc操作&#xff08;插入数据&#xff09; 1.3 原始jdbc操作的分析 原始jdbc开发存在的问题如下&#xff1a; ①数据库连接创建、释放频繁造成系统资源浪费从而影响系统性能 ②sql 语句在代码中硬编…

深入理解Java虚拟机:Java运行内存结构

本篇内容包括&#xff1a;JAVA 运行内存结构&#xff0c;即 程序计数器、Java 虚拟机栈、本地方法栈 、Java堆、方法区、运行时常量池 以及 直接内存等相关内容&#xff01; 一、JAVA 运行内存结构 Jvm 执行 Java 程序时&#xff0c;会把它所管理的内存划分为若干个不同的数据…

软件设计与体系——创建型模式

如果有兴趣了解更多相关内容&#xff0c;欢迎来我的个人网站看看&#xff1a;瞳孔的个人空间 创建型模式&#xff1a; 创建型模式抽象了实例化过程帮助系统独立于如何创建、组合和表示对象 一个类创建型模式使用继承改变被实例化的类类创建型模式使用继承改变被实例化的类对象…

自学Python需要掌握哪些知识点?怎么学?

其实这个问题你可以转换一下思路&#xff0c;自学python有什么合适的学习路线&#xff0c;基本路线里涉及到的都是需要掌握的~ 单个知识点那罗列起来可是太多了~ 另外你可以考虑下你自学python的目的和方向&#xff0c;是单纯兴趣还是说要学了就业~ 想往人工智能方向发展还是P…

如何实现CAN/LIN通信路由测试?

目前车载网络通信越来越复杂&#xff0c;通信总线、协议多种多样&#xff0c;网关作为信息交互的载体&#xff0c;主要通过报文路由转发、报文过滤、信号重组等方式实现不同网段、不同协议间的信息交互&#xff1b;在复杂的车载网络中&#xff0c;网关通信路由转发功能具有非常…

软件设计师--数据结构考点细节总结

视频2022软件设计师-提炼高频考点-个人学习过程的总结&#xff0c;仅供参考&#xff01;_哔哩哔哩_bilibili 目录 1&#xff0c;栈 2,二叉树 3&#xff0c;HUFFMAN 特点&#xff1a; 4&#xff0c;文件压缩比 5&#xff0c;拓扑排序 -- 有向无环图 6&#xff0c;查找 7…

CSDN编程竞赛第八期 | 参赛经历分享

参赛经历分享 一共参与七次了&#xff0c;这是我第二次在CSDN竞赛上获奖&#xff0c;上一次获奖是在第四期&#xff0c;获得了第三名&#xff0c;拿到了一个高级背包、一件T恤和一个获奖证书&#xff0c;我之前拍照发过动态的&#xff0c;详情请见&#xff1a;动态 - CSDN 然后…

机器视觉(三):摄像机标定技术

目录&#xff1a; 机器视觉&#xff08;二&#xff09;&#xff1a;机器视觉硬件技术 机器视觉&#xff08;三&#xff09;&#xff1a;摄像机标定技术 &#x1f30f;&#x1f9d0;以下为正文&#x1f984;&#x1fa90; 摄像机标定的目的&#xff1a;三维重建 空间物体表面…

FOTS:端到端的文本检测与识别方法的原理应用与优势

导言&#xff1a; 基于深度学习的可端到端训练的自然场景检测与识别算法(text spotting)由于其简洁高效且统一的结构&#xff0c;逐渐取代了过去将检测与识别分阶段训练然后拼接在一起的方案&#xff0c;成为自然场景文本检测与识别的主流研究方向之一。端到端自然场景文本检测…

rk3288-android8.1-OV13850

第一步,要到规格书,知道引脚定义 第二步,对应原理图定义 第三步 电源是打开的,如果是GPIO请设置 第四步,查看是否有驱动 out目录可以看到驱动 第五步,查看是否有以下文件

分组后再子集再查询

【问题】 有如下查询结果 从这里面查询每个产品 (ProductID) 具有某个&#xff08;或同时具有某几个&#xff09;属性 (即 AttID) 的产品数量&#xff0c;并按 ClassID 分组 如果只查询某个产品具有单个属性的话&#xff0c;可以用如下 SQL&#xff0c;如下面查询具有 AttID 为…

AI图像合成技术如何用于数字营销和创意领域?

全栈程序员推荐&#xff0c;AI好书必读 北大出版社&#xff0c;人工智能原理与实践 人工智能和数据科学从入门到精通 详解机器学习深度学习算法原理 人工智能原理与实践 全面涵盖人工智能和数据科学各个重要体系经典 “哇&#xff0c;你拍到的吗&#xff1f;等一下——那是专…

Ray 框架

一 Ray是什么&#xff0c;优势 Spark则是一个面向数据处理的产品&#xff0c;RDD则是以数据作为抽象对象的&#xff0c;你关心的应该是数据如何处理&#xff0c;而不是去如何拆解任务&#xff0c;关心资源如何被分配&#xff0c;这其中涉及的概念比如Job,Stage,task你最好都不…

1807521-02-3,PEP azide,PEP叠氮化物其中叠氮基发生点击反应

PEP azide叠氮基在铜存在下与炔烃反应&#xff0c;生成三唑&#xff0c;可作为多功能连接物。西安凯新生物科技有限公司​叠氮基可以通过点击化学与炔烃、BCN、DBCO反应&#xff0c;生成稳定的三唑键。末端羧酸在活化剂&#xff08;如EDC或HATU&#xff09;存在下可与伯胺基反应…

【数据结构与算法】详解归并

目录一、归并的定义及思路二、归并的代码实现一、归并的定义及思路 归并就是归并排序&#xff0c;将两个有序的或两个以上有序的数列合并成一个有序的数列 其基本思想是&#xff1a; 分而治之&#xff0c;与快排的分治是不同的&#xff0c;并归是以中间点分治。 其步骤为&#…

web自动化测试入门篇02——selenium安装教程

&#x1f60f;作者简介&#xff1a;博主是一位测试管理者&#xff0c;同时也是一名对外企业兼职讲师。 &#x1f4e1;主页地址&#xff1a;【Austin_zhai】 &#x1f646;目的与景愿&#xff1a;旨在于能帮助更多的测试行业人员提升软硬技能&#xff0c;分享行业相关最新信息。…

查题校园题库

查题校园题库 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 查题校园题库&#xff1a;查题校园题库后台&#xff08;点击跳转&a…