位置: IT常识 - 正文

带你看看 TypeScript 5.0 的新特性(带你看看房间英语怎么写)

编辑:rootadmin
带你看看 TypeScript 5.0 的新特性 一、写在前面

推荐整理分享带你看看 TypeScript 5.0 的新特性(带你看看房间英语怎么写),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:带你看看火星的真实地貌,带你看看真实的缅北,看到这样你还敢去吗?,带你看看黄圣依住的豪宅,带你看看长沙交谊舞厅,带你看看于震住的豪宅,带你看看长沙交谊舞厅,带你看看历史,带你看看西方极乐世界,内容如对您有帮助,希望把文章链接给更多的朋友!

TypeScript 5.0 已经于 2023 年 3 月 16 日发布了,带来了许多新功能,同时也在性能方面进行了优化,下面让我们来一起看看新版 TypeScript 中比较有重要的变化吧。

二、新特性2-1、速度、包体积优化

首先是新版本性能的提升,5.0 版本在构建速度、包体积方面都有着不错的优化,下面这张表格是 5.0 版本相对于 4.9 的性能提升幅度:

项目相对于 TS 4.9 的优化幅度material-ui 构建时间90%TypeScript 编译器启动时间89%TypeScript 编译器自构建时间87%Outlook Web 构建时间82%VS Code 构建时间80%npm 包大小59%

TypeScript 5.0 具体做了什么来优化性能呢?

首先是将namespace迁移到module,这样可以应用更多现代构建工具的特性来进行优化(如作用域提升),并移除一些已弃用的代码,将包大小减少了约 26.4 MB。其次是 TS 精简了编译器内部的对象所存储的数据,减少了内存使用量。然后是在一些特定领域进行优化,如在闭包中偶尔使用var,而不是let或const来提高解析性能。

总的来说,大多数 TypeScript 项目都能从 TypeScript 5.0 中获得 10% 到 20% 性能提升。

2-2、新的装饰器标准

装饰器这个东西,写 ts 的小伙伴一定不会陌生,虽然它还不是一个标准的 js 特性,但 ts 已经在之前的版本就支持了“实验性”装饰器。而在最新的 5.0 版本中,装饰器语法将不再是一个“实验性”的语法,也不需要在编译选项中加入--experimentalDecorators配置项了(虽然在新版本,这个编译选项依旧会存在),TypeScript 5.0 将会原生支持装饰器语法!

带你看看 TypeScript 5.0 的新特性(带你看看房间英语怎么写)

下面让我们来看一个装饰器的例子吧——

首先我们有一个很简单的类:

class Person { name: string; constructor(name: string) { this.name = name; } greet() { console.log(`Hello, my name is ${this.name}.`); }}const p = new Person("zy");p.greet();

我们想在这个类的greet函数中加点日志,并记录调用函数的名称,那么最简单的方式是这样做:

class Person { name: string; constructor(name: string) { this.name = name; } greet() { console.log("LOG: Entering method greet."); console.log(`Hello, my name is ${this.name}.`); console.log("LOG: Exiting method greet."); }}const p = new Person("zy");p.greet();

但如果我们想给更多的函数都加上类似的功能,那用装饰器就非常合适了,比如我们可以编写一个loggedMethod,如下所示:

function loggedMethod( originalMethod: any, context: ClassMethodDecoratorContext) { const methodName = String(context.name); function replacementMethod(this: any, ...args: any[]) { console.log(`LOG: Entering method '${methodName}'.`); const result = originalMethod.call(this, ...args); console.log(`LOG: Exiting method '${methodName}'.`); return result; } return replacementMethod;}

这样我们用loggedMethod这个装饰器来装饰这个函数,就可以实现上述效果了:

class Person { name: string; constructor(name: string) { this.name = name; } @loggedMethod greet() { console.log(`Hello, my name is ${this.name}.`); }}const p = new Person("zy");p.greet();// Output://// LOG: Entering method 'greet'.// Hello, my name is zy.// LOG: Exiting method 'greet'.

我们甚至可以创建一个“返回装饰器函数的函数”,这样我们就可以为装饰器开发更多定制化更多的功能,比如说,我想自定义输出到控制台的字符串的前缀:

function loggedMethod(headMessage = "LOG:") { return function actualDecorator( originalMethod: any, context: ClassMethodDecoratorContext ) { const methodName = String(context.name); function replacementMethod(this: any, ...args: any[]) { console.log(`${headMessage} Entering method '${methodName}'.`); const result = originalMethod.call(this, ...args); console.log(`${headMessage} Exiting method '${methodName}'.`); return result; } return replacementMethod; };}

这样我们在loggedMethod被用作装饰器之前调用它,就可以实现传入定制的字符串作为控制台输出字符串的前缀了:

class Person { name: string; constructor(name: string) { this.name = name; } @loggedMethod("LOG:") greet() { console.log(`Hello, my name is ${this.name}.`); }}const p = new Person("zy");p.greet();// Output://// LOG: Entering method 'greet'.// Hello, my name is zy.// LOG: Exiting method 'greet'.2-3、const类型参数

在推断对象的类型时,ts 通常会选择一种通用的类型。例如,在这种情况下,会将names的类型推断为string []:

type HasNames = { readonly names: string[] };function getNamesExactly<T extends HasNames>(arg: T): T["names"] { return arg.names;}// Inferred type: string[]const names = getNamesExactly({ names: ["Alice", "Bob", "Eve"] });

推断成string []固然没有问题,但由于names是readonly的,而推断出的类型不是readonly的,这就会产生一些困扰。虽然我们可以通过添加as const来解决这个问题,就像这样:

// The type we wanted:// readonly ["Alice", "Bob", "Eve"]// The type we got:// string[]const names1 = getNamesExactly({ names: ["Alice", "Bob", "Eve"] });// Correctly gets what we wanted:// readonly ["Alice", "Bob", "Eve"]const names2 = getNamesExactly({ names: ["Alice", "Bob", "Eve"] } as const);

但这样写很麻烦,且容易被忘掉。所以在 TypeScript 5.0 中,我们可以将const修饰符直接添加到类型参数

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

上一篇:AI:人工智能领域AI工具产品集合分门别类(文本类、图片类、编程类、办公类、视频类、音频类、多模态类)的简介、使用方法(持续更新)之详细攻略(《ai人工智能》)

下一篇:使用Swiper插件实现视频轮播,怎么实现切换自动播放视频?(swiper插件使用步骤)

  • 8条经验教你学会如何运营微信公众号(怎么学最有效)

    8条经验教你学会如何运营微信公众号(怎么学最有效)

  • 192.168.3.1华为路由器设置(192.168.3.1华为路由器)

    192.168.3.1华为路由器设置(192.168.3.1华为路由器)

  • excel太宽了怎么转pdf(excel太宽了怎么转一页pdf)

    excel太宽了怎么转pdf(excel太宽了怎么转一页pdf)

  • vivos9支持的5G频率有哪些(vivos9支持几个5g频段)

    vivos9支持的5G频率有哪些(vivos9支持几个5g频段)

  • 苹果11手机镜面翻转在哪设置(苹果11手机镜面字体怎么打)

    苹果11手机镜面翻转在哪设置(苹果11手机镜面字体怎么打)

  • 抖音为什么关注不了(抖音为什么关注不了对方,显示对方设置隐私)

    抖音为什么关注不了(抖音为什么关注不了对方,显示对方设置隐私)

  • airpods2右耳没反应(airpods右耳没有反应)

    airpods2右耳没反应(airpods右耳没有反应)

  • 智能手机与可穿戴移动设备中,采用什么功能进行移动支付(智能手机可穿戴吗)

    智能手机与可穿戴移动设备中,采用什么功能进行移动支付(智能手机可穿戴吗)

  • 苹果反转关了还是黑色(iphone反转手机屏幕亮怎么关闭)

    苹果反转关了还是黑色(iphone反转手机屏幕亮怎么关闭)

  • sa/nsa双模5g是什么意思(sa、nsa双模)

    sa/nsa双模5g是什么意思(sa、nsa双模)

  • 竞品信息指的是什么(竞品信息收集包括哪些内容)

    竞品信息指的是什么(竞品信息收集包括哪些内容)

  • 手机电子表格怎么贴照片(手机电子表格怎么做)

    手机电子表格怎么贴照片(手机电子表格怎么做)

  • 换数据线会影响闪充吗(换数据线会影响快充吗)

    换数据线会影响闪充吗(换数据线会影响快充吗)

  • 华为微信图标有个盾牌(华为微信图标有个蓝色对勾)

    华为微信图标有个盾牌(华为微信图标有个蓝色对勾)

  • 安卓手机怎么变成苹果系统(安卓手机怎么变成电脑模式)

    安卓手机怎么变成苹果系统(安卓手机怎么变成电脑模式)

  • 苹果11怎么清除缓存(苹果11怎么清除数据垃圾)

    苹果11怎么清除缓存(苹果11怎么清除数据垃圾)

  • 苹果xr怎么降回原来的系统(苹果xr怎么降回原来版本)

    苹果xr怎么降回原来的系统(苹果xr怎么降回原来版本)

  • qq群名片为什么不能粘贴(qq群名片为什么改不了)

    qq群名片为什么不能粘贴(qq群名片为什么改不了)

  • 视频压缩失败什么意思(视频压缩失败什么原因)

    视频压缩失败什么意思(视频压缩失败什么原因)

  • 拼多多砍价记录在哪看(拼多多砍价记录怎么删除不了)

    拼多多砍价记录在哪看(拼多多砍价记录怎么删除不了)

  • 删除的软件在哪里找回(删除的软件在哪里可以找回来)

    删除的软件在哪里找回(删除的软件在哪里可以找回来)

  • dsp处理器与mcu的结构上的异同(dsp处理器与其他处理器的本质区别)

    dsp处理器与mcu的结构上的异同(dsp处理器与其他处理器的本质区别)

  • Win11如何选择播放声音的位置 Win11选择播放声音位置的方法(win11自带的播放器)

    Win11如何选择播放声音的位置 Win11选择播放声音位置的方法(win11自带的播放器)

  • 使用js在前端web页面调用打印机(js在web前端中的作用)

    使用js在前端web页面调用打印机(js在web前端中的作用)

  • 生产成本年末转入什么科目
  • 物业公司增值税加计扣除
  • 中国电信的通信网络
  • 企业净利润怎么分配
  • 如何分析成本费用偏高
  • 招待费汇算清缴扣除比例
  • 代收污水处理费免税
  • 资产负债表中其他流动资产包括哪些科目
  • 个人动产租赁所得税税率表最新
  • 利润表本期金额怎么算
  • 个体工商户化妆品经营范围
  • 支付境外软件服务怎么用
  • 其他收益科目账务处理
  • 个人独资企业对公账户的钱可以转到私人账户吗
  • 房地产行业预缴税款
  • 没收履约保证金交增值税吗
  • 企业自主研发的成功案例
  • 不相关企业之间调拨资产该如何做账务处理?
  • 餐饮服务业是否属于企业
  • 公司客车高速费如何抵扣进项税?
  • 330税盘费是什么意思?
  • 地税收的其他政府基金计入科目及收益
  • 电子发票真伪查询
  • 对外投资公司经营范围
  • 企业滞纳金属于什么会计科目
  • 企业债券投资利息怎么算
  • 如何查询发票是否验旧
  • 一般纳税人购买原材料会计分录
  • 取得其他权益工具投资发生的交易费用
  • 出口企业年底结转税金
  • iphone中的照片如何找回
  • 委托加工物资企业原材料都是自己采购
  • 购货方收到红字发票要认证吗
  • 销售已使用过的固定资产增值税税率
  • 芦荟的功效与作用治什么病
  • 顺流交易逆流交易未实现内部交易损益
  • incognito.exe
  • PHP:imageloadfont()的用法_GD库图像处理函数
  • PHP:imagefilledpolygon()的用法_GD库图像处理函数
  • 土地增值税的意思
  • css如何设置渐变色
  • javascript获取input的值并计算
  • 买入返售金融资产和卖出回购金融资产
  • vue3 hooks实现
  • php ajax 实现
  • 房地产开发费用最高扣除比例
  • 公司收不到的账款而发不出去怎么办
  • 帝国cms安装教程
  • 企业内部培训费用
  • 发票校验码的作用
  • centos7源码包安装
  • 小规模纳税人可以做进出口贸易吗
  • 商业收入税收怎么收费
  • 公司股东向银行货款,与私人财产有没有关系
  • 接受银行承兑汇票的流程
  • 增值税小规模纳税人2023年政策
  • 账务处理程序的定义
  • 土地违约金的法律规定
  • 退休人员基本养老金计发表
  • 建筑企业包工包料业务的发票开具和涉税处理
  • 跨年红冲收入记在本年度
  • 计提社保如何做分录
  • 拆借 拆放
  • 哪些发票可以报账
  • 应交增值税贷方余额表示什么
  • 固定资产包括哪些东西
  • sqlserver分页查询
  • 判断某个字段的值是否在指定的范围内
  • upgrade.exe - upgrade进程是什么意思
  • win8.1流畅吗
  • 进程rundll32文件很多
  • linux拉起进程
  • win7旗舰版64位系统开机时软件设置自动启动详细图文教程
  • [置顶]公主大人接下来是拷问时间31
  • 基于个人同意处理个人信息的个人什么撤回其同意
  • jquery防止重复提交
  • shell脚本判断命令是否执行成功
  • unity3d打包apk
  • javascript实现2016新年版日历
  • 在烟台如何发布招聘信息
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设