TypeScript高级技巧: 提取对象类型
现在无论是前端,还是基于Node.js的后端,对TypeScript的使用越来越多。今天我们说一个TypeScript高级使用技巧——提取已有对象的类型。
在ts中,通常我们是先声明类型,再创建该类型的对象:
type User = { name: string, age: number } const me: User = { name: 'Youmoo', age: 18 };
在某些情况下我们并不知道一个对象的类型,(如引用三方库的对象,而三方库并没有暴露该对象的类型时)
我们可以借助ts,让它帮我们推断出对象类型:
const animal = { type: 'cat', name: 'Tom' }; // 对于以上对象,我们需要提取出它的类型,并创建一个同类型的对象 type Animal = typeof animal; // 定义一个同类型的对象 const mouse: Animal = { type: 'mouse', name: 'Jerry' };
在visual studio code中,可以看到ts帮我们正确地推导出了Animal类型:
以上是简单的object对象,若我们想提取数组内元素的类型呢?
方法有多种。
一、利用下标提取元素类型
type Animals = Array<{ type: string, name: string }>; type Animal = Animals[number];
二、利用conditional+infer
type Animals = Array<{ type: string, name: string }>; type Animal = Animals extends (infer T)[] ? T : never;
有了以上技巧,可以引出一些有意思的玩法。
比如,将string数组中的元素提取为常量类型。
const valid_answers = ['yes', 'no', 'answer'] as const; type Answer = (typeof valid_answers)[number]; const ans1: Answer = 'yes';// 没问题 const ans2: Answer = 'nope';// 编译不通过
其中Answer的类型定义是:
我们甚至可以继续向内,提取更深层的字段类型:
type Foo = { x: Array<{ y: string }> }; type TypeY = Foo['x'][number]['y'];
你说,TypeY是什么类型呢?
本文初发布于微信公众号 背井(nineteen84)。扫码可关注。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
代码跑得慢甩锅Python?手把手教你如何给代码提速30%
云栖号:https://yqh.aliyun.com第一手的上云资讯,不同行业精选的上云企业案例库,基于众多成功案例萃取而成的最佳实践,助力您上云决策! Python已经得到了全球程序员的喜爱,但是还是遭到一些人的诟病,原因之一就是认为它运行缓慢。 其实某个特定程序(无论使用何种编程语言)的运行速度是快还是慢,在很大程度上取决于编写该程序的开发人员自身素质,以及他们编写优化而高效代码的能力。 Medium上一位小哥就详细讲了讲如何让python提速30%,以此证明代码跑得慢不是python的问题,而是代码本身的问题。 时序分析 在开始进行任何优化之前,我们首先需要找出代码的哪些部分使整个程序变慢。有时程序的问题很明显,但是如果你一时不知道问题出在哪里,那么这里有一些可能的选项: 注意:这是我将用于演示的程序,它将进行指数计算(取自Python文档): # slow_program.py from decimal import * def exp(x): getcontext().prec += 2 i, lasts, s, fact, num = 0, 0, 1, 1, 1 while...
- 下一篇
终于有人把超融合和边缘计算说清楚了
近年来超融合在国内迎来快速增长,根据IDC最新发布的报告,2019上半年中国超融合市场增长率达56.7%,大幅超越去年同期。Gartner发布的最新报告,到2023年我国超融合市场依旧保持23%的快速增长。超融合覆盖范围正在进一步扩大,不仅服务的客户在向大规模企业扩张,应用场景也从服务器虚拟化、VDI扩展到数据库、私有云等关键业务。 随着5G时代边缘计算数据中心的兴起,超融合市场正在迎来更大的发展空间。Gartner预测,2023年35%以上的超融合产品将应用在边缘计算领域。一起来了解一下超融合和边缘计算吧! 01 超融合的起源与内涵 随着云技术和虚拟化技术的发展,网络服务的构建有了新的思路和方案。2013 年的 vmware 大会上提出 VSAN 技术,其主要概念是在虚拟化集群中安装闪存和硬盘来构造存储层。VSAN 技术配置具有足够磁盘插槽和存储控制器的 VSAN主机,形成可扩展的分布式存储架构,生成易于管理的共享存储源。在 VSAN 技术的基础上诞生了超融合架构的概念。 超融合架构是新一代横向扩展的软件定义架构,它由整合了 CPU、内存、存储、网络和虚拟化软件平台的通用硬件单元组成...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS8编译安装MySQL8.0.19
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Red5直播服务器,属于Java语言的直播服务器
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS6,CentOS7官方镜像安装Oracle11G