Typescript - 泛型
原文:TypeScript基本知识点整理
零、序言
很多时候,类型是写死的,不利于复用,泛型简单的理解就是声明时不设置具体类型,后期使用时再传入,解决类、接口、方法的复用性,以及对不特定数据类型的支持。
一、泛型函数
函数在调用时,指定泛型 T 的类型
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | function f9<T>(value:T) : T { //传入参数类型为T,返回值的类型也为T console.log(`我传入了${value}`) return value } f9<number>(10) function f10 <T> (value:T) : any { //传入参数的类型为T,返回任意类型的值 console.log(`我返回了${value}`) return `我返回了${value}` } console.log(f10<string>( '我是ljy' )) |
这样方便的 地方在与:调用函数的时候, function f9<T>(value:T) : T 指定 <> 中的类型值后,编辑器就能把 value:T 以及返回值的 T 转换成指定的类型。
二、泛型类
泛型类,使用 <> 跟在类名后面
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | class Ni <T> { name : T constructor (name : T) { this .name = name } say (value : T) : any { return `${ this .name}说${value}` } } const ni1 = new Ni<string>( 'ljy' ) //实例化类,指定类的类型是string console.log(ni1.say( '你好' )) const ni2 = new Ni<number>(20) //实例化类,指定类的类型是number console.log(ni2.say(23)) |
顺便贴一个 java 中 ArrayList 泛型的案例:
1 | List<String> stringArrayList = new ArrayList<String>(); |
三、泛型接口
第一种形式:
1 2 3 4 5 6 7 8 9 | interface Niniubi { <T> (value:T) : any } let fff : Niniubi = <T>(value : T) : any => { return `我传入了${value}` } console.log(fff<number>(25)) console.log(fff<string>( 'ljy' )) |
第二种形式:
1 2 3 4 5 6 7 8 | interface ConfigFnTwo<T>{ (value:T):T; } function setDataTwo<T>(value:T):T{ return value } var setDataTwoFn:ConfigFnTwo<string> = setDataTwo setDataTwoFn( 'name' ); |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现