位置: 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插件使用步骤)

  • 美团先用后付怎么开通(美团先用后付怎么关闭啊)

    美团先用后付怎么开通(美团先用后付怎么关闭啊)

  • 华为浏览器下载的文件在哪里看(华为浏览器下载软件被阻止怎么解决)

    华为浏览器下载的文件在哪里看(华为浏览器下载软件被阻止怎么解决)

  • 电脑运行ps突然黑屏(电脑运行ps突然黑屏怎么办)

    电脑运行ps突然黑屏(电脑运行ps突然黑屏怎么办)

  • 抖音如何打开相机权限(抖音如何打开相关搜索)

    抖音如何打开相机权限(抖音如何打开相关搜索)

  • iphone蜂窝网络错误怎么办(iPhone蜂窝网络错误是什么原因)

    iphone蜂窝网络错误怎么办(iPhone蜂窝网络错误是什么原因)

  • 三星最早的智能手机(三星最早的智能手机型号图片)

    三星最早的智能手机(三星最早的智能手机型号图片)

  • vivo手机没电了怎么启用备用电池(vivo手机没电了怎么办瞬间补电)

    vivo手机没电了怎么启用备用电池(vivo手机没电了怎么办瞬间补电)

  • 猿辅导电脑版怎么下载(猿辅导电脑版怎么缓存)

    猿辅导电脑版怎么下载(猿辅导电脑版怎么缓存)

  • qq自定义在线状态怎么去掉机型(qq自定义在线状态怎么设置)

    qq自定义在线状态怎么去掉机型(qq自定义在线状态怎么设置)

  • 华为手机怎么删除热点资讯(华为手机怎么删除下载的软件)

    华为手机怎么删除热点资讯(华为手机怎么删除下载的软件)

  • 三线表格如何制作方法(三线表格如何制作)

    三线表格如何制作方法(三线表格如何制作)

  • 京东门店预约怎么取消(京东门店预约怎么操作)

    京东门店预约怎么取消(京东门店预约怎么操作)

  • 京东怎么取消预约商品(京东怎么取消预购订单)

    京东怎么取消预约商品(京东怎么取消预购订单)

  • 苹果x卡顿怎么解决方法(苹果x卡顿怎么关机重启)

    苹果x卡顿怎么解决方法(苹果x卡顿怎么关机重启)

  • 什么是远程登录(什么是远程登录的两个特征)

    什么是远程登录(什么是远程登录的两个特征)

  • 处理器r5和i5的区别(处理器r5和i5哪个好)

    处理器r5和i5的区别(处理器r5和i5哪个好)

  • 手机通话突然中断是怎么回事(手机通话突然中断然后恢复)

    手机通话突然中断是怎么回事(手机通话突然中断然后恢复)

  • 无线网卡驱动在哪个文件夹(无线网卡驱动在哪更新)

    无线网卡驱动在哪个文件夹(无线网卡驱动在哪更新)

  • 苹果xr如何设置自动开关机(苹果xr如何设置铃声)

    苹果xr如何设置自动开关机(苹果xr如何设置铃声)

  • 硬件检测不到独立显卡(硬件检测检测不到独显)

    硬件检测不到独立显卡(硬件检测检测不到独显)

  • 微信密码忘了手机号也换了怎么登录(微信密码忘了手机号停机了怎么找回)

    微信密码忘了手机号也换了怎么登录(微信密码忘了手机号停机了怎么找回)

  • 抖音单机拍摄在哪里(抖音单机拍摄在哪里设置)

    抖音单机拍摄在哪里(抖音单机拍摄在哪里设置)

  • 钢化膜贴完四周不吸附(钢化膜贴完四周不吸附影响使用吗)

    钢化膜贴完四周不吸附(钢化膜贴完四周不吸附影响使用吗)

  • 收到所得税汇算退税计入补贴收入
  • 手机个人所得税app下载官网
  • 企业所得税如何做分录
  • 纳税期限届满
  • 印花税的计提
  • 个体户定额多少不用交税
  • 股份有限公司个人所得税缴纳比例
  • 法人独资企业怎么样
  • 企业所得税退抵税费申请(汇算清缴)怎么撤销
  • 汇算清缴可以调成本吗
  • 税金及附加包括什么
  • 应付利润的核算内容
  • 本年利润是负数的会计分录
  • 公司内部食堂招待费账务处理
  • 虚开发票企业所得税怎么补缴税?
  • 事业单位发生管理费用
  • 居民企业技术转让所得税优惠政策
  • 开具发票财务需要管理吗?
  • 企业税收案例分析
  • 餐饮企业收到现金抵用券会计分录
  • 非税收入通用票据需要盖章吗
  • 逃避缴纳税款是税收法多少条
  • 广告支持政策
  • 作业成本法的成本对象包括哪几个层次
  • 资源税的征税对象和纳税环节
  • 4S店装修改造费帐务处理?
  • 周转材料购置费属于材料费吗
  • 固定资产进项税额转出怎么做账务处理
  • 现金流量表的编制基础是权责发生制
  • win10清空回收站是灰色的
  • 制造费用结转到生产成本
  • 公司注册资金存在风险吗
  • 个人应纳税所得额是要交钱吗
  • 长期待摊费用是非流动资产吗
  • 企业安全生产费用不得出现赤字
  • 差额征税专用发票税额怎么算
  • 合伙企业利润分配首要依据
  • 缴纳社保公司需要税务登记吗
  • php定义方法
  • 营业税金及附加会计分录
  • css选择器怎么用
  • 什么叫动量交易
  • 人工成本与工资的关系
  • 签发转账支票需要的单据
  • 普通发票和增值税普通发票一样吗
  • 支付给职工以及为职工支付的现金增加说明什么
  • 企业租车接送员工上下班
  • 跨月报销的算当月还是上个月的
  • 支付技术转让费所得税处理
  • 交通运输服务费税率
  • 固定资产的印花税费计入什么科目里
  • 工程项目开发的一般流程
  • 用友薪资管理怎么取消启用
  • 去银行更换帐户需要什么
  • 办公报销项目
  • 收入与费用配比也就是费用要由收入补偿
  • 收入的确认条件包括
  • 收到的劳务发票怎么做账
  • centos6.10安装教程
  • Remind_XP.exe - Remind_XP是什么进程 有什么用
  • win7u盘没有安全选项卡
  • windows8.1关闭开机密码
  • win10任务快速切换
  • xp升win10教程
  • win7系统安装不了软件怎么办
  • Linux 压缩某个文件夹的实现方法
  • js实现功能
  • vue动态引入模块
  • unity错误cs1002
  • 安卓录制音频
  • dirsearch批量
  • 安卓基础入门教程
  • 第五章推动经济高质量发展心得
  • rst.open
  • python定义全局
  • 税务划分行业
  • 江苏省定额规则
  • 国家税务总局河北地税局
  • 快手怎样代卖
  • 湖北省税务局网站授权
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设