位置: 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(权重下降是什么原因)

  • 开博尔电视盒子刷机(开博尔电视盒子)(开博尔电视盒子,手机遥控下载)

    开博尔电视盒子刷机(开博尔电视盒子)(开博尔电视盒子,手机遥控下载)

  • oppo手机管家怎么卸载(oppo手机管家怎么解除管控)

    oppo手机管家怎么卸载(oppo手机管家怎么解除管控)

  • 荣耀60来电闪光灯在哪(荣耀60来电闪光灯怎么开)

    荣耀60来电闪光灯在哪(荣耀60来电闪光灯怎么开)

  • 公开版是不是国行版本(公开版啥意思?跟国行有啥区别)

    公开版是不是国行版本(公开版啥意思?跟国行有啥区别)

  • 网管型和非网管型交换机有什么区别(网管型和非网管型交换机可以互相通讯吗)

    网管型和非网管型交换机有什么区别(网管型和非网管型交换机可以互相通讯吗)

  • 电脑按哪个键可以关机(电脑按哪个键可以锁屏)

    电脑按哪个键可以关机(电脑按哪个键可以锁屏)

  • vi818a是什么手机(vivo v1818a是什么手机)

    vi818a是什么手机(vivo v1818a是什么手机)

  • 如何彻底删除手机数据不被恢复(如何彻底删除手机里的照片)

    如何彻底删除手机数据不被恢复(如何彻底删除手机里的照片)

  • 千兆网线和万兆网线有什么区别(千兆网线和万兆网线对网速有影响吗)

    千兆网线和万兆网线有什么区别(千兆网线和万兆网线对网速有影响吗)

  • mate30pro首次充电充多久(华为mate30pro手机第一次充电需要充多久)

    mate30pro首次充电充多久(华为mate30pro手机第一次充电需要充多久)

  • 小米是世界500强吗(小米是世界500强企业吗)

    小米是世界500强吗(小米是世界500强企业吗)

  • 手机出现耳机模式怎么取消(手机出现耳机模式没有声音怎么办安卓)

    手机出现耳机模式怎么取消(手机出现耳机模式没有声音怎么办安卓)

  • 手机如何切换输入法(手机如何切换输入语言)

    手机如何切换输入法(手机如何切换输入语言)

  • 三星W20 5G手机屏幕多大(三星w2020手机屏多少钱)

    三星W20 5G手机屏幕多大(三星w2020手机屏多少钱)

  • 淘宝双十一活动是什么(淘宝双十一活动淘气值多少可以参加)

    淘宝双十一活动是什么(淘宝双十一活动淘气值多少可以参加)

  • 华为p30微信视频可以美颜吗(华为p30微信视频聊天怎么开美颜)

    华为p30微信视频可以美颜吗(华为p30微信视频聊天怎么开美颜)

  • 索尼a73光圈在哪调(索尼a73光圈在哪设置)

    索尼a73光圈在哪调(索尼a73光圈在哪设置)

  • 外接显示器分辨率调不上去(外接显示器分辨率调不了)

    外接显示器分辨率调不上去(外接显示器分辨率调不了)

  • qq群视频在哪看(qq群视频怎么看)

    qq群视频在哪看(qq群视频怎么看)

  • Win10打开控制台提示“管理员已阻止mmc.exe

    Win10打开控制台提示“管理员已阻止mmc.exe"?(window如何打开控制台)

  • 马塔马塔附近的霍比特人村,新西兰北岛 (© 500px Asia/Getty Images)(马塔饰件怎么样)

    马塔马塔附近的霍比特人村,新西兰北岛 (© 500px Asia/Getty Images)(马塔饰件怎么样)

  • 机械租赁适用税率
  • 销售佣金 个税
  • 固定模板的东西叫什么
  • 公司基本户如何注销
  • 划拨房二次出售缴纳出让金吗
  • 工程安装公司暂估人工费如何做会计核算?
  • 缴纳增值税金税率是多少
  • 各税种会计分录
  • 税盘忘记清盘了怎么办
  • 贷款已支付属于什么会计科目
  • 网上订酒店怎么预定
  • 在职员工 开公司
  • 营改增后房地产公司税种及税率
  • 小规模纳税人开专票和普票的区别
  • 工会经费80%
  • 核定征收的企业可以享受税收优惠吗
  • 管理费用进项税额转出会计分录
  • 积分全部换购商品是什么
  • 股息红利需要缴纳个税吗
  • 王者荣耀花木兰打法教学
  • 发现以前年度多交增值税怎么申报
  • Win10电脑重装系统要多少钱
  • 彭布洛克郡谋杀
  • 实际退税能退多少
  • 付境外人员劳务费
  • 长期借款的会计处理例题
  • php模板引擎类
  • react生命周期分为两类
  • php知识点汇总与解答
  • 个税返还的会计处理
  • 工程没结算能否竣工验收
  • 增值税发票复印件可以入账吗与原件一致
  • 直线折旧法账务处理例题
  • phpcms邀请注册送积分
  • 没有发票能办临时牌照吗
  • 分公司以总公司名义
  • 调账处理
  • 高温费收税吗
  • 福利费属于管理费吗
  • 微信收款和支付宝收款有啥区别
  • 个人独资企业增值税免征额
  • 消防工程改造怎样入账
  • 投资者向企业投入资本的形式
  • 简易征收应纳税额
  • 企业用现金支付本企业职工工资时应
  • 贴现帐务处理
  • 无形资产可以占多少比例
  • 客户退货不退赠品怎么办
  • 利润表的未分配利润是哪个
  • 劳务报酬现金流量
  • 本年利润的会计科目
  • 对外投资信息忘记填了
  • mysql用处
  • win8怎么设置
  • ubuntu 14.10
  • mac设置启动系统
  • 直接玩鬼泣4
  • linux 下VSFTP 530 Permission denied错误的解决方法
  • 求windows7用户账户
  • win7安装无法将windows配置为在此计算机上运行
  • 如何远程登录路由器
  • win8账户
  • linux小技巧
  • surface准备就绪
  • win8怎么创建宽带连接
  • JavaScript中的数据类型分哪为两大类?
  • jqgrid设置宽度
  • JUnit in android
  • unity协程会阻塞主线程吗
  • django forms.py
  • 设计一个投票程序
  • 如何在脚本中调字体
  • High Level Networking Concepts
  • 税控盘忘记抄报罚多少
  • 滴滴收入统计
  • 稳岗补贴是否需在企业所得税汇算时调增
  • 浙江网上税务局app下载
  • 北京税务分所怎么样啊
  • 法制建设包括哪三个方面
  • 2018年建筑业增值税税率变更文件
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设