位置: IT常识 - 正文

TS中的泛型(泛型 static)

编辑:rootadmin
TS中的泛型 文章目录一、泛型是什么?有什么作用二、泛型用法2.1 在函数中使用泛型2.2 在接口中使用泛型2.3 在类中使用泛型三、泛型约束3.1使用接口约束泛型3.2 数组泛型四、泛型工具类型4.1 Partial4.2 Record4.3 Pick4.4 Exclude4.5 ReturnType一、泛型是什么?有什么作用

推荐整理分享TS中的泛型(泛型 static),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:t 泛型,t 泛型,ts泛型传入多个参数,mapstruct 泛型,ts泛型传入多个参数,ts中的泛型作用,t 泛型,ts泛型传入多个参数,内容如对您有帮助,希望把文章链接给更多的朋友!

当我们定义一个变量不确定类型的时候有两种解决方式:

使用any 使用any定义时存在的问题:虽然 以 知道传入值的类型但是无法获取函数返回值的类型;另外也失去了ts类型保护的优势使用泛型 泛型指的是在定义函数/接口/类型时,不预先指定具体的类型,而是在使用的时候在指定类型限制的一种特性。二、泛型用法2.1 在函数中使用泛型function test <T> (arg:T):T{ console.log(arg); return arg;}test<number>(111);// 返回值是number类型的 111test<string | boolean>('hahaha')//返回值是string类型的 hahahatest<string | boolean>(true);//返回值是布尔类型的 true

使用方式类似于函数传参,传什么数据类型,T就表示什么数据类型, 使用表示,T也可以换成任意字符串。

2.2 在接口中使用泛型// 注意,这里写法是定义的方法哦interface Search { <T,Y>(name:T,age:Y):T}let fn:Search = function <T, Y>(name: T, id:Y):T { console.log(name, id) return name;}fn('li',11);//编译器会自动识别传入的参数,将传入的参数的类型认为是泛型指定的类型2.3 在类中使用泛型class Animal<T> { name:T; constructor(name: T){ this.name = name; } action<T>(say:T) { console.log(say) }}let cat = new Animal('cat');cat.action('mimi')三、泛型约束3.1使用接口约束泛型interface Person { name:string; age:number;}function student<T extends Person>(arg:T):T { return arg;}student({name:'lili'});//类型 "{ name: string; }" 中缺少属性 "age",但类型 "Person" 中需要该属性student({ name: "lili" , age:'11'});//不能将类型“string”分配给类型“number”student({ name: "lili" , age:11});3.2 数组泛型TS中的泛型(泛型 static)

let arr:Array<number> =[1,2,3] === let arr:number[]=[1,2,3]

四、泛型工具类型4.1 Partial

partial<T>的作用就是将某个类型中的属性全部变为可选项? 示例:

interface Person { name:string; age:number;}function student<T extends Person>(arg: Partial<T>):Partial<T> { return arg;}4.2 Record

Record<K extends keyof any, T>的作用是将K中所有的属性转换为T类型;示例:

interface PageInfo { title: string}type Page = 'home'|'about'|'other';const x: Record<Page, PageInfo> = { home: { title: "xxx" }, about: { title: "aaa" }, other: { title: "ccc" },};4.3 Pick

Pick<T, K extends keyof T>的作用是将某个类型中的子属性挑出来,变成包含这个类型部分属性的子类型,示例:

interface Todo { title:string, desc:string, time:string}type TodoPreview = Pick<Todo, 'title'|'time'>;const todo: TodoPreview ={ title:'吃饭', time:'明天'}4.4 Exclude

Exclude<T,U>的作用是将某个类型中属于另一个类型的属性移除掉,示例:

type T0 = Exclude<"a" | "b" | "c", "a">; // "b" | "c"const t:T0 ='b';4.5 ReturnType

returnType<T>的作用是用于获取函数T的返回类型,示例:

type T0 = ReturnType<() => string>; // stringtype T1 = ReturnType<(s: string) => void>; // voidtype T2 = ReturnType<<T>() => T>; // {}type T3 = ReturnType<<T extends U, U extends number[]>() => T>; // number[]type T4 = ReturnType<any>; // anytype T5 = ReturnType<never>; // anytype T6 = ReturnType<string>; // Errortype T7 = ReturnType<Function>; // Error

暂时先了解这么多,后续继续补充…

本文链接地址:https://www.jiuchutong.com/zhishi/298333.html 转载请保留说明!

上一篇:作为大学生,你还不会搭建chatGPT微应用吗?(作为大学生你能为国家安全贡献哪些力量论文)

下一篇:权重衰减/权重衰退——weight_decay(权重下降是什么原因)

  • 小米浏览器缓存的视频怎么弄成本地视频(小米浏览器缓存的视频怎么保存到相册)

    小米浏览器缓存的视频怎么弄成本地视频(小米浏览器缓存的视频怎么保存到相册)

  • 苹果低于20充电很伤电池吗(苹果低于20充电充满嘛)

    苹果低于20充电很伤电池吗(苹果低于20充电充满嘛)

  • 苹果7p通话没声音免提都失灵(苹果7p通话没声重启又好了)

    苹果7p通话没声音免提都失灵(苹果7p通话没声重启又好了)

  • 账号存在异常风险不能使用红包功能(账号存在异常风险40024)

    账号存在异常风险不能使用红包功能(账号存在异常风险40024)

  • wps如何在y上面打一个小尖(wps怎么在文字上方加横线)

    wps如何在y上面打一个小尖(wps怎么在文字上方加横线)

  • 手机步数不准怎么校正(手机步数不准怎么调)

    手机步数不准怎么校正(手机步数不准怎么调)

  • 苹果xr手机相册突然没了怎么办(苹果xr手机相册怎么拼图)

    苹果xr手机相册突然没了怎么办(苹果xr手机相册怎么拼图)

  • 淘宝无法换绑支付宝(淘宝无法换绑支付宝 未完成交易)

    淘宝无法换绑支付宝(淘宝无法换绑支付宝 未完成交易)

  • 手机号码是空号了还能补办吗(手机号码是空号了,充话费还能用吗?)

    手机号码是空号了还能补办吗(手机号码是空号了,充话费还能用吗?)

  • 打印机三角符号闪烁是什么原因(打印机三角符号和彩色墨水闪烁是什么原因)

    打印机三角符号闪烁是什么原因(打印机三角符号和彩色墨水闪烁是什么原因)

  • p30发热怎么解决(p30发热严重如何处理)

    p30发热怎么解决(p30发热严重如何处理)

  • 荣耀20pro安兔兔跑分(荣耀20安兔兔跑)

    荣耀20pro安兔兔跑分(荣耀20安兔兔跑)

  • 苹果手机黑解和用卡贴的区别(苹果手机黑解和国行有什么区别)

    苹果手机黑解和用卡贴的区别(苹果手机黑解和国行有什么区别)

  • bklaloo是什么手机(bkkaloo是什么型号)

    bklaloo是什么手机(bkkaloo是什么型号)

  • 多次呼转暂时无法接通是什么意思(已经多次呼转)

    多次呼转暂时无法接通是什么意思(已经多次呼转)

  • iphone8怎么换铃声(苹果8怎么更换铃声视频教程)

    iphone8怎么换铃声(苹果8怎么更换铃声视频教程)

  • 红米k20pro支持typc耳机吗(红米k20Pro支持WiFi6)

    红米k20pro支持typc耳机吗(红米k20Pro支持WiFi6)

  • 美柚里的周期什么意思(美柚上的周期是什么意思)

    美柚里的周期什么意思(美柚上的周期是什么意思)

  • vivoy3支持反向充电怎么充(vivoy31s反向充电)

    vivoy3支持反向充电怎么充(vivoy31s反向充电)

  • 小米手环进水怎么处理(小米手环进水怎么维修)

    小米手环进水怎么处理(小米手环进水怎么维修)

  • 抖音怎么推广产品(抖音怎么推广产品怎么收费)

    抖音怎么推广产品(抖音怎么推广产品怎么收费)

  • 总有骚扰电话打进来怎么办(总会有骚扰电话)

    总有骚扰电话打进来怎么办(总会有骚扰电话)

  • 个税免申报什么时候申报
  • 什么情况下要交环保税
  • 个人向公司提供劳务,开发票
  • 高新企业认定合格后什么时候开始享受税收优惠?
  • 主营业务税金及附加大概比例
  • 建筑劳务公司工人工资计入什么科目
  • 利润分配转作股本股利
  • 税款必须要15号之前交吗
  • 领增值税专票需要发票吗
  • 航天金税交499
  • 公司股东可以自己买保险吗
  • 处理报废的固定资产
  • 报废车辆补贴收据怎么写
  • 高新技术企业认定条件
  • 企业注册资金需要拿钱出来吗
  • 申报表作废后怎么显示的是已申报,不能重新申报
  • 年薪制与月薪制的优与劣
  • 劳动保护用品应由什么开支
  • 先收钱后开票怎么做分录
  • 应收款收不回账务处理
  • 哪里查询发票是否抵扣
  • 营业执照五证合一图片
  • 公账转公账没有发票
  • 企业所得税汇算清缴表
  • 商贸公司商品品种规格多如何核算
  • 不确认收入要结转成本吗
  • uniapp怎么开启路由拦截
  • 注销小规模公司需要什么材料
  • php 访问数据库
  • 发票收款人和复核人,开票人没填影响报销吗
  • vue框架是什么样子的
  • 毕业设计2022年幼儿园
  • CNN卷积神经网络/手写数字识别[VHDL][MATLAB]带源码
  • 雪花算法时钟回拨
  • 纳税检查企业所得税企业合并
  • 会计常用单据样本大全
  • 企业所得税汇算清缴操作流程
  • 采购发票生成的会计凭证
  • 电脑自学网站推荐
  • 学习笔记——Servlet
  • mongodb导入
  • 租金收入如何分析
  • 个人代工程发票要缴纳的个税
  • 虚开发票的三种情形是?
  • 残保金申报基数
  • 没有认证抵扣的发票如何冲红
  • 补缴以前年度所得税怎么做会计分录
  • 车船税手续费返还时间
  • 商贸企业增值税税率是多少
  • 转让金融商品应交增值税可以抵扣吗
  • 办理契税所需要的证件
  • 个体户能开增票吗?
  • 佣金如何做账分录
  • 库存商品视频讲解
  • 买车保险返现是什么意思
  • 集装箱发票是否要在备注栏注明地址
  • 净资产收益率怎么算出来的
  • 新开办企业如何建账
  • 明细账怎么弄
  • MySQL:Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEM
  • MySql5.6使用validate password 插件加强密码强度的安装及使用方法
  • 如何动态修改mysql的全局参数
  • mysql配置文件my.ini
  • ntfs win98
  • 资源管理器操作教程
  • linux 命令详解
  • centos state down
  • dnssne是什么意思
  • linux手动设置ip指令
  • 系统相机打不开
  • win7微软账户
  • 基于javascript的毕业设计
  • 原生js实现promise.all
  • cocos2dx开发的游戏有哪些
  • 查看系统网络连接数
  • node.js实战
  • fragment detach
  • 可以跨区办理税务ukey更换吗
  • 提高税务管理水平,降低税务风险
  • 税务总局2016年70号公告
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设