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

  • 红米怎么用外置储存卡(红米怎么用外置储存卡一体机)

    红米怎么用外置储存卡(红米怎么用外置储存卡一体机)

  • 腾讯会员到期日哪里看(腾讯会员到期日是30号,包不包括30日那一天呢)

    腾讯会员到期日哪里看(腾讯会员到期日是30号,包不包括30日那一天呢)

  • vivo NEX 3s是有呼吸灯的吗(vivonex3怎么设置呼叫等待)

    vivo NEX 3s是有呼吸灯的吗(vivonex3怎么设置呼叫等待)

  • 请不要挂机你拨打的电话正在通话是拉黑吗

    请不要挂机你拨打的电话正在通话是拉黑吗

  • 东莞公交车可以微信支付吗(东莞公交车可以用深圳通吗)

    东莞公交车可以微信支付吗(东莞公交车可以用深圳通吗)

  • 针孔摄像头会一闪一闪的吗

    针孔摄像头会一闪一闪的吗

  • 抖音音浪怎么提不了现(抖音音浪怎么提取现金)

    抖音音浪怎么提不了现(抖音音浪怎么提取现金)

  • 小米手机右上角hd是什么意思(小米手机右上角图标怎么消除)

    小米手机右上角hd是什么意思(小米手机右上角图标怎么消除)

  • 荣耀v10充电器是多少w(荣耀v10充电器是多少瓦)

    荣耀v10充电器是多少w(荣耀v10充电器是多少瓦)

  • list set map区别(list,map,set区别)

    list set map区别(list,map,set区别)

  • 鼠标插在主机哪个接口(鼠标插在主机哪个接口usb)

    鼠标插在主机哪个接口(鼠标插在主机哪个接口usb)

  • ar眼镜和vr眼镜区别

    ar眼镜和vr眼镜区别

  • 三星s8支持控制空调吗(三星s8支持控制面板吗)

    三星s8支持控制空调吗(三星s8支持控制面板吗)

  • tcp是什么层协议(tcp属于什么层)

    tcp是什么层协议(tcp属于什么层)

  • iphone11拍照模糊(为什么iphone11拍照模糊)

    iphone11拍照模糊(为什么iphone11拍照模糊)

  • 大王卡免流包括优酷吗(大王卡免流包括爱奇艺吗)

    大王卡免流包括优酷吗(大王卡免流包括爱奇艺吗)

  • 苹果x可以指纹付款吗(苹果x能指纹)

    苹果x可以指纹付款吗(苹果x能指纹)

  • 手机发不出短信是什么原因(手机发不出短信显示发送失败)

    手机发不出短信是什么原因(手机发不出短信显示发送失败)

  • 图片不能大于500k怎么办(图片不得大于500k怎么弄)

    图片不能大于500k怎么办(图片不得大于500k怎么弄)

  • hd1080p什么意思(hd好还是1080好)

    hd1080p什么意思(hd好还是1080好)

  • 最右怎么找通讯录好友(最右怎么匹配通讯录)

    最右怎么找通讯录好友(最右怎么匹配通讯录)

  • 线下支付送流量在哪看(线下支付送流量是真的吗)

    线下支付送流量在哪看(线下支付送流量是真的吗)

  • 华为穿戴和华为运动健康有什么区别(华为穿戴和华为健康)

    华为穿戴和华为运动健康有什么区别(华为穿戴和华为健康)

  • 微信辅助一个月可以做几次(微信辅助一个月能辅助几次)

    微信辅助一个月可以做几次(微信辅助一个月能辅助几次)

  • 微信翻译在哪里(微信中英文翻译怎么用)

    微信翻译在哪里(微信中英文翻译怎么用)

  • Win10升级Win11是自动安装吗 Win10升级Win11方法介绍(Win10升级win11是激活状态吗?)

    Win10升级Win11是自动安装吗 Win10升级Win11方法介绍(Win10升级win11是激活状态吗?)

  • 支付宝如何缴纳车辆购置税
  • 小规模纳税人收入是含税还是不含税
  • 什么是商业汇票和银行汇票
  • 医疗垃圾处理费标准2020
  • 发票用完了领发票需要带什么东西
  • 软件工程质保金
  • 收到投资款需要缴纳增值税吗
  • 办公室空调维修报告
  • 收到厂家给医药的短信
  • 企业前期开办费没有发票怎么入账
  • 车位出售时要交什么税
  • 非税收入包括哪些
  • 股东投资款是否可以现金支付
  • 分公司代理人
  • 企业购买饮水机滤芯会计分录
  • 销项负数发票怎么填报增值税报表
  • 哪些开普通发票
  • 代销商品
  • 公司注销时资本公积为股东出资款要缴税吗?
  • 当月认证失控发票怎么做账处理?
  • 收到转账支票 转给下一家
  • 亏损合同如何处理
  • 原材料入账价值合理损耗
  • 发票打偏了是否罚款
  • 专用发票的开票人收款人复核人都要开齐吗
  • 金税盘服务费计入什么会计科目
  • 出口退税限额如何理解
  • 模具是可以长期待摊吗
  • 期末调汇凭证怎么调
  • 塞维利亚是港口吗?
  • 营业收入包括应收账款吗
  • 归属性质
  • 公司给员工发放的福利都要扣个税吗
  • 基础知识讲解
  • yolov5 workers
  • 逆回购利息计算公式
  • thinkphp 多数据库
  • 公司车辆使用费用平均
  • 二元运算例子
  • python中字典的键有何要求
  • php 缓存
  • 金蝶固定资产累计折旧凭证生成
  • 应收账款余额百分比法怎么算
  • SQLserver2008数据库Excel数据导入语句
  • 企业购入固定资产误计入管理费用
  • 其他应收款借方表示增加吗
  • 影响企业营业利润的有哪些
  • 研发费用怎么入帐
  • 中级会计需要初级会计证吗
  • 复利年金的区别
  • 铁路运费印花税谁承担
  • 余额调节表的模板
  • 营改增之后账务怎么处理
  • 金税盘每年服务费可以抵扣吗
  • 通行费发票电子化 机场路
  • 技术人员工资条
  • 股息红利等权益性投资收益
  • win7怎么把桌面图标显示出来
  • ubuntu16.04终端在哪
  • win7安装软件出现乱码
  • 64位ubuntu8.04 安装QQ
  • win8怎样获取管理员权限
  • centos7搭建frp
  • linux工具包
  • windows8无法安装wps
  • win10如何设置时间和日期
  • linux dig命令
  • vim命令详解
  • shell执行多个命令
  • js输出100以内能被5整除的数
  • python语言文件
  • python爬虫的几种方法
  • javascript 性能
  • 寻找志同道合的小伙伴
  • 河南省人民医院和郑大一附院哪个好
  • 增值税预缴税款退税申请怎么写
  • 个人土地建房
  • 广东省电子税务局app下载手机版
  • 上市股票转为非上市
  • 专票代开流程?
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设