最新要闻
- 转换柱套什么清单_转换柱
- 山西瀚玺能源有限公司 世界百事通
- 天天日报丨希捷全球首发30+TB机械硬盘!十几年的热辅助修成正果
- 如何冷冻绿豆砂锅 焦点热闻
- 阿莱格里:如果没被罚分,尤文可能比现在多拿10分
- 小米13Ultra翻车?网友对比三星、苹果,结果沉默了
- 简讯:SpaceX星舰升空爆炸发射失败 马斯克庆祝:当地居民苦不堪言“太可怕”
- 吃米、吃面:哪个更健康?哪个更容易胖?_热头条
- 设计美学与顶级影像共存!华为P60 Pro成业内最美全能影像旗舰|当前热文
- 天天热头条丨国内上映3天 电影《灌篮高手》票房破了3亿:有望刷新记录
- 天天观察:山西省阳泉市发布道路结冰黄色预警
- 焦点播报:计算机软件是指什么及其有关文档_计算机软件是指什么
- 【新视野】豆瓣9.1分 赵继伟吐槽《灌篮高手》晴子造型“太草率” 本人回应:还会支持电影
- 今年全球或迎史上最热夏天:“厄尔尼诺”卷土重来
- 环球热点!软卧车厢分配3男1女引热议 铁路曾试行女性包厢但匆匆退市
- 世界焦点!中国的民间故宫,位于山西平遥,为中国传统建筑的杰出代表
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
世界报道:TypeScript中的实用工具类型(Utility Types)
TypeScript中的实用工具类型是一些预定义的泛型类型,可用于操作或创建其它新类型。这些实用工具类型在所有TypeScript项目中都是全局可用的,因此无需添加任务依赖项即可使用它们。
1.Partial
将Type的所有属性都设置为可选的类型。
(资料图片仅供参考)
1 interface Person { 2 name: string; 3 age: number; 4 email: string; 5 } 6 7 type PartialPerson = Partial; 8 9 //相当于10 // interface Person {11 // name?: string | undefined;12 // age?: number | undefined;13 // email?: string | undefined;14 // }15 16 interface Todo {17 title: string;18 description: string;19 }20 21 function updateTodo(todo: Todo, fieldsToUpdate: Partial ) {22 return { ...todo, ...fieldsToUpdate };23 }24 25 const todo1 = {26 title: "organize desk",27 description: "clear clutter",28 };29 30 const todo2 = updateTodo(todo1, {31 description: "throw out trash",32 });
2.Required
与Partical
1 interface Person { 2 name?: string | undefined; 3 age?: number | undefined; 4 email?: string | undefined; 5 } 6 7 8 type RequiredPerson = Required; 9 10 // 相当于11 // interface Person {12 // name: string;13 // age: number;14 // email: string;15 // }
3.Omit
构建一个新类型--从类型Type
中获取所有属性,然后从中剔除Keys
属性。
1 interface User { 2 id: number; 3 name: string; 4 email: string; 5 age: number; 6 } 7 8 type UserWithoutEmail = Omit; 9 10 // 相当于11 // interface Person {12 // id: string;13 // name: string;14 // age: number;15 // }
也可以移除多个属性,
1 interface User { 2 id: number; 3 name: string; 4 email: string; 5 age: number; 6 } 7 8 type UserWithoutEmailAndName = Omit; 9 10 // 相当于 11 // interface Person {12 // id: string;13 // age: number;14 // }
4.Pick
从类型Type
中挑选部分属性Keys
来构造类型,与Omit相反。
1 interface User { 2 id: number; 3 name: string; 4 email: string; 5 age: number; 6 } 7 8 type UserWithEmailAndName = Pick; 9 10 // 相当于11 // interface Person {12 // name: string;13 // email: string;14 // }
可以组合使用这些类型,创造新的类型
1 interface User { 2 id: number; 3 name: string; 4 email: string; 5 age: number; 6 } 7 8 type PartialPick = Partial>; 9 10 // 相当于11 // interface Person {12 // name?: string | undefined;13 // email?: string | undefined;14 // }
1 interface User { 2 id: number; 3 name: string; 4 email: string; 5 age: number; 6 } 7 8 type OmitPartialPick = Omit>, "email">; 9 10 // 相当于 11 // interface Person {12 // name?: string | undefined;13 // }
5.Readonly
通过该Type构造新类型,并将它所有的属性设置为只读的,也就意味着构造出的类型的属性不能被再次赋值。
1 interface Person { 2 id: number; 3 name: string; 4 age: number; 5 } 6 7 type ReadonlyPerson = Readonly; 8 9 //相当于10 // interface Person {11 // readonly id: number;12 // readonly name: string;13 // readonly age: number;14 // }15 16 const person: ReadonlyPerson = {17 id: 1,18 name: "John",19 age: 2520 };21 22 person.name = "Mike"; // Error: Cannot assign to "name" because it is a read-only property.
这个类型可用来表示在运行时会失败的赋值表达式(比如,当尝试给冻结对象的属性再次赋值时)
Object.freeze
1 function freeze(obj: T): Readonly ;
6.Record
构造一个对象类型,其属性为Keys,属性值为Type;该实用工具类型可用于将一种类型的属性映射到另一种类型。
1 interface CatInfo { 2 age: number; 3 breed: string; 4 } 5 6 type CatName = "miffy" | "boris" | "mordred"; 7 8 const cats: Record= { 9 miffy: { age: 10, breed: "Persian" },10 boris: { age: 5, breed: "Maine Coon" },11 mordred: { age: 16, breed: "British Shorthair" },12 };13 14 cats.boris;15
7.Exclude
通过从 UnionType 中排除所有可分配给 ExcludedMembers 的属性来构造一个类型;也就是删除 union 类型的成员来创建新类型。
1 type T0 = Exclude<"a" | "b" | "c", "a">;2 type T0 = "b" | "c"3 4 type T1 = Exclude<"a" | "b" | "c", "a" | "b">;5 type T1 = "c"6 7 type T2 = Excludevoid), Function>;8 type T2 = string | number
8.Extract
通过从 Type 中提取可分配给 Union 的所有联合成员来构造一个类型,与 Exclude 相反。
1 type T0 = Extract<"a" | "b" | "c", "a" | "f">;2 type T0 = "a"3 4 type T1 = Extractvoid), Function>;5 type T1 = () => void
9.NonNullable
通过从 Type 中排除 null 和 undefined 来构造一个类型。
1 type T0 = NonNullable;2 type T0 = string | number3 4 type T1 = NonNullable ;5 type T1 = string[]
10.ReturnType
由函数类型Type
的返回值类型构建一个新类型。
1 function add(a: number, b: number): number { 2 return a + b; 3 } 4 5 type AddReturnType = ReturnType; 6 // type AddReturnType = number; 7 8 9 function addStr(a: string, b: string): string{10 return a + b;11 }12 13 type AddReturnType2 = ReturnType ;14 // type AddReturnType2 = string;15 16 type T0 = ReturnType<() => string>;17 type T0 = string18 19 type T1 = ReturnType<(s: string) => void>;20 type T1 = void21 22 type T2 = ReturnType< () => T>; 23 type T2 = unknown24 25 type T3 = ReturnType< () => T>;26 type T3 = number[]
11.Parameters
由函数类型Type
的参数类型来构建出一个元组类型。
1 function add(a: number, b: string, c:boolean): string { 2 return a + b; 3 } 4 5 type AddReturnType = Parameters; 6 // type AddReturnType = [a: number, b: string, c:boolean]; 7 8 type T0 = Parameters<() => string>; 9 type T0 = []10 11 type T1 = Parameters<(s: string) => void>;12 type T1 = [s: string]13 14 type T2 = Parameters< (arg: T) => T>;15 type T2 = [arg: unknown]
12.Awaited
这种类型旨在模拟异步函数中的 await 或 Promises 上的 .then() 方法等操作——具体来说,就是它们递归展开 Promises 的方式。
1 async function fetchData(): Promise{ 2 // fetch data from API and return a string 3 } 4 5 type ResolvedResult = Awaited >; 6 // type ResolvedResult = string 7 8 type A = Awaited >; 9 type A = string10 11 type B = Awaited >>; 12 type B = number13 14 type C = Awaited >; 15 type C = number | boolean
以上,是较常用的一些实用工具类型。
参考资料:
https://www.typescriptlang.org/docs/handbook/utility-types.html#uppercasestringtype
https://dev.to/arafat4693/typescript-utility-types-that-you-must-know-4m6k
关键词:
世界报道:TypeScript中的实用工具类型(Utility Types)
转换柱套什么清单_转换柱
山西瀚玺能源有限公司 世界百事通
天天日报丨希捷全球首发30+TB机械硬盘!十几年的热辅助修成正果
如何冷冻绿豆砂锅 焦点热闻
阿莱格里:如果没被罚分,尤文可能比现在多拿10分
小米13Ultra翻车?网友对比三星、苹果,结果沉默了
简讯:SpaceX星舰升空爆炸发射失败 马斯克庆祝:当地居民苦不堪言“太可怕”
吃米、吃面:哪个更健康?哪个更容易胖?_热头条
设计美学与顶级影像共存!华为P60 Pro成业内最美全能影像旗舰|当前热文
天天热头条丨国内上映3天 电影《灌篮高手》票房破了3亿:有望刷新记录
天天观察:山西省阳泉市发布道路结冰黄色预警
焦点播报:计算机软件是指什么及其有关文档_计算机软件是指什么
【新视野】豆瓣9.1分 赵继伟吐槽《灌篮高手》晴子造型“太草率” 本人回应:还会支持电影
今年全球或迎史上最热夏天:“厄尔尼诺”卷土重来
环球热点!软卧车厢分配3男1女引热议 铁路曾试行女性包厢但匆匆退市
世界焦点!中国的民间故宫,位于山西平遥,为中国传统建筑的杰出代表
Java中的堆内存和栈内存_天天速读
【世界新视野】selenium 4(python)快速入门-1 简介
全球报道:github 小技巧
武术视频课程 即时
男生能穿芭蕾舞练功服吗_男生能穿女生芭蕾练功服吗
3699元 一加Ace 2原神定制礼盒下周首销:预售时被抢光 线下人山人海-天天视点
女子喝药一周发现成分是蟑螂 网友科普:中成药、效果很好 环球新资讯
2023年第一条!贵南高铁联调联试 贵州省首次时速350公里-环球资讯
女子酒后当街撕扯男子上衣,警方:属交通事故,已转交警处理|焦点日报
Go中响应式编程库RxGo详细介绍_天天最资讯
CentOS7---基于 CentOS 7 构建 LVS-DR 群集_世界热点
世界速看:Springboot 多实例负载均衡部署
每日热闻!如何干燥落叶以保持鲜艳的颜色_女孩成人礼父母送什么礼物好呢
会计专业特长岗位_会计专业特长_每日消息
根治续航焦虑!比亚迪腾势N7续航里程出炉:最远能跑702km
三体原声黑胶来了:限量1500份 带独立编码|全球即时
淄博鸭货店小哥回应因帅气走红:以为是自己鸭货做的好吃 天天播资讯
天天亮点!语言录制兼容长按跟点击录制
詹姆斯:我认为我会在攻防两端表现更好,我们要保护主场-天天看点
皮耶罗:尤文有些锋无力,不过还好有什琴斯尼 全球观点
瑞幸罚员工抄写差评100遍违法吗?网友吵翻|全球实时
极速下载!百度网盘超级会员12个月SVIP年卡直减100元:198元好价 焦点资讯
天天播报:上海车展已禁止车企送冰淇淋 主办方:属实
《孝庄秘史》被曝抄袭作家朴月小说 网友纷纷惊叹:你觉得可惜吗?-焦点精选
火影忍者鼬出现的集数-火影忍者鼬出场集数
环球热点!广西壮族自治区贺州市2023-04-22 07:55发布雷电黄色预警
真我11 Pro+真机照出炉:圆形镜组、白色素皮后盖
没对比没伤害!谷歌裁员上万人:CEO年薪却高达15亿
【速看料】日本天价芒果再创记录 单颗价格超1.5万人民币!
环球播报:世界读书日丨作家清扬婉兮荐读:《在熟悉的家中向世界道别》
精彩看点:【manim动画教程】--目录(完结)
【全球独家】Rust编程语言入门之模式匹配
滚动:meta标签的一些属性描述
红高粱电视剧主题曲九儿歌词_红高粱主题曲九儿歌词 每日简讯
环球讯息:神速!第200家AITO用户中心开业 余承东:让车主用车更方便、更放心
今日热闻!不止领克08!魅族Flyme Auto生态扩圈:牵手吉利高端品牌极星
国家安全 全民守护!赵全营镇开展全民国家安全日宣传活动
LPR连续8个月“原地踏步” 二季度实体经济融资成本仍有望保持低位
电脑装机兼容性检查
4月份沪牌拍卖结果公布:中标率11%,平均成交价92412元-每日快播
世界快看点丨男子离奇失踪7天 人找到时已失温:科普危害有多大
男子坐飞机和妈祖像邻座:刚开始有点慌 被告知是幸运不用怕
离奇!印度一奶牛被火车撞飞30米砸死铁路边撒尿老人
福岛核污染水排海可能于7月开始实施:海底隧道6月底完工_今日看点
拉萨市绿色工业招商引资推介会在南京举行|当前热闻
最新消息:3239套保障性租赁住房加快建设中哈密市保障性安居工程建设迎新进展
小米AX9000的Docker能做什么
天天观焦点:《操作系统原型--xv6分析与实验》第一章:qemu启动xv6问题记录
HCIP-Datacom-Core 2.1 IS-IS基础实验
每日焦点!vue-admin-template 如何添加快捷导航(标签导航栏)
张歆艺晒和窦骁何超莲合影,被指修图太狠,袁弘穿花衬衫参加晚宴
2.8K高刷屏+天玑9000!vivo Pad2线下提前开售:2799元起 天天头条
斯嘉丽说不会再演黑寡妇了:影迷痛哭 天天新动态
焦点快看:浙江水库大坝端掉罕见一王三后白蚁巢:孕育百万级白蚁集团
樱子小姐的脚下埋着尸体08卷第一章:表与里02
文章学习:基于AVX-512指令集的同态加密算法中大整数运算性能优化与突破
最新消息:Java中常用不可变类
网传深圳二手房参考价取消:有业主连夜涨200万,降价房源比涨价多
险资配置遇压力:资金充沛 优质资产难寻|看热讯
【世界时快讯】多省都要封杀!老头乐事故可构成交通肇事罪 大爷们只能买新能源车、考驾照?
世界通讯!纯净的寓言
天天热讯:性能测试的一些专业概念
环球快消息!昂利康:4月20日召开业绩说明会,投资者参与
责任准备金评估利率或下调 监管部门指导险企储备新产品
使用 Spring Cloud Bus 在微服务之间传递消息示例
北方将现大范围雨雪局地大暴雪:局地冷到破纪录 秋裤快穿回来 全球观点
0秒吸水:亚光加厚纯棉大浴巾23.9元(单条450g)
【全球速看料】学系统集成项目管理工程师(中项)系列03_职业道德规范
【环球时快讯】德宏股份:2022年净利润1107.61万元 同比下降71.54%
【环球财经】英国4月份制造业和服务业复苏分化进一步明显
环球观察:周鸿祎发全员信 确认这类360员工不会被GPT取代!
世界快讯:精研“模考”功能
观察:罗翔在新东方当过三年老师 俞敏洪:讲课幽默风格是被新东方训练的
国内用户无缘!iOS 17将支持三方应用商店或仅限欧洲:苹果准备收费
商品日报(4月21日):负反馈担忧加重黑色系全线下跌 乙二醇逆势涨超2%
快消息!博敏电子:4月21日融券卖出10.9万股,融资融券余额4.75亿元
安徽宁国经开区新型储能项目战略合作签约,预期投资总规模达30亿元
【全球播资讯】AI教你玩游戏
微资讯!厂商疯狂备货!RTX 4060 Ti下月杀到 老黄会良心到卖2800元?
摔角动态外媒爆料蛋妞VS米兹的头号挑战者赛两分钟草草了事的原因
全球热讯:FirewallD入门手册
2023.4.21【图论】点分治|世界新视野
全球视讯!学系统集成项目管理工程师(中项)系列07_信息(文档)管理