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

  • 怎么关闭小米云服务(怎么关闭小米云空间)

    怎么关闭小米云服务(怎么关闭小米云空间)

  • 淘宝购物车抄作业怎么删除(淘宝购物车抄作业有什么好处)

    淘宝购物车抄作业怎么删除(淘宝购物车抄作业有什么好处)

  • 手机怎么开启地震警报(手机怎么开启地理位置权限)

    手机怎么开启地震警报(手机怎么开启地理位置权限)

  • 抖音图文怎么设置不能下载(抖音图文怎么设置封面)

    抖音图文怎么设置不能下载(抖音图文怎么设置封面)

  • 腾讯视频电脑版怎么一起看(腾讯视频电脑版怎么上传视频)

    腾讯视频电脑版怎么一起看(腾讯视频电脑版怎么上传视频)

  • 华为手机修改时间和日期在哪里(华为手机修改时间格式)

    华为手机修改时间和日期在哪里(华为手机修改时间格式)

  • 电脑桌面图标怎么变小(电脑桌面图标怎么调整大小)

    电脑桌面图标怎么变小(电脑桌面图标怎么调整大小)

  • 如何格式化c盘(电脑硬盘如何格式化c盘)

    如何格式化c盘(电脑硬盘如何格式化c盘)

  • 华为nova4e是麒麟多少处理器(华为nova4是麒麟970处理器吗)

    华为nova4e是麒麟多少处理器(华为nova4是麒麟970处理器吗)

  • iphone11激活时出现陌生id(苹果11激活显示hola)

    iphone11激活时出现陌生id(苹果11激活显示hola)

  • 为什么苹果官网没有苹果xsmax了(为什么苹果官网比京东自营贵那么多)

    为什么苹果官网没有苹果xsmax了(为什么苹果官网比京东自营贵那么多)

  • 8p原彩显示怎么恢复(8p原彩显示打开好还是关闭好)

    8p原彩显示怎么恢复(8p原彩显示打开好还是关闭好)

  • airpods能听歌不能打电话(airpods听歌可以充电吗)

    airpods能听歌不能打电话(airpods听歌可以充电吗)

  • 微信发多张图片怎么合并(微信发多张图片怎么打包)

    微信发多张图片怎么合并(微信发多张图片怎么打包)

  • 后壳开胶会影响手机吗(后壳开胶会影响保修吗)

    后壳开胶会影响手机吗(后壳开胶会影响保修吗)

  • 为什么酷狗下载的歌是kgm格式(为什么酷狗下载的音乐没有到本地)

    为什么酷狗下载的歌是kgm格式(为什么酷狗下载的音乐没有到本地)

  • qq幸运字符sgr是什么意思(qq幸运字符saly)

    qq幸运字符sgr是什么意思(qq幸运字符saly)

  • 华为手机调声音怎么调(华为手机调声音的按钮坏了怎么办)

    华为手机调声音怎么调(华为手机调声音的按钮坏了怎么办)

  • 微信买票身份核验异常(微信购票身份核实失败)

    微信买票身份核验异常(微信购票身份核实失败)

  • 苹果4k和高清的区别(苹果4k好还是高清好)

    苹果4k和高清的区别(苹果4k好还是高清好)

  • 一个人可以申请几个淘宝账号(一个人可以申请几张信用卡)

    一个人可以申请几个淘宝账号(一个人可以申请几张信用卡)

  • oppor9s手机卡顿反应慢怎么办(oppor9s手机卡顿最强修复方法)

    oppor9s手机卡顿反应慢怎么办(oppor9s手机卡顿最强修复方法)

  • 华为mate30支持5g网吗(华为mate30支持5G频段)

    华为mate30支持5g网吗(华为mate30支持5G频段)

  • ios13三指编辑怎么关闭(ios13如何关闭三指编辑)

    ios13三指编辑怎么关闭(ios13如何关闭三指编辑)

  • 阿里p9有几个人(阿里p9待遇是不是很厉害了)

    阿里p9有几个人(阿里p9待遇是不是很厉害了)

  • 云空间怎么使用(换手机了云空间怎么使用)

    云空间怎么使用(换手机了云空间怎么使用)

  • airpods2续航时间多久(airpods2续航时间变短了怎么办)

    airpods2续航时间多久(airpods2续航时间变短了怎么办)

  • 已解决ERROR: Could not build wheels for opencv-python-headless, which is required to install pyproject.(打方向咯噔一声已解决)

    已解决ERROR: Could not build wheels for opencv-python-headless, which is required to install pyproject.(打方向咯噔一声已解决)

  • 一人在两家公司上班怎么缴纳个税
  • 年度汇算退税是什么意思
  • 个人出租商用房税率
  • 计提租赁费用
  • 购买网银盾计入什么科目
  • 电子税务局财务报表在哪里查询
  • 发票打印机贵吗
  • 印花税购销合同包括哪些
  • 广告公司会议记录内容
  • 企业所得税季报是全年累计吗
  • 出纳都需要做什么表格
  • 不能抵扣的进项发票怎么做分录
  • 2018购房契税税率
  • 出现一窗式比对失败,该纳税人没有防伪税控比对信息!
  • 个体工商户经营所得税怎么申报
  • 进项税额抵扣欠税后怎么申报
  • 报销抵扣联和发票联都需要吗
  • 发票丢了还可以重开吗
  • 其他应收款代扣代缴个人所得税
  • 增值税步骤
  • 与存货相关的车间固定资产日常
  • 王者荣耀中孙膑是男的女的
  • 苹果14promax最新版本16.6
  • 会计估计变更的会计处理方法
  • 企业给予的折扣怎么入账
  • 票据追索权纠纷被告
  • 怎么租办公室省钱
  • 金税四期查到了怎么办
  • mac电脑色彩设置
  • php str函数
  • 企业的支付宝
  • 让绿萝疯长的妙招
  • php网站结构
  • 转出固定资产账务处理
  • 其他业务支出属于什么会计科目
  • 资本化的后续支出包括哪些项目
  • 确保政府采购
  • 小规模纳税人的企业所得税税率
  • 旅游业发票的税率是多少
  • 利润的调增和调减
  • 增值税附加税有什么
  • c 语言 static
  • wordpress 自动生成文章
  • discuzcms
  • 费用报销单里的类别怎么填
  • 代宰 增值税
  • 医院累计折旧会计分录
  • 一般纳税人开普票要交税几点
  • 飞机票抵扣进项税怎么填附表二
  • 医院如何开票
  • 法人如何网上申请辞职手续
  • 招待费发票可以开专票吗
  • 公司报销专用发票
  • 多栏式日记账核算组织程序优缺点
  • 科研专用费是什么
  • 购入汽车属于什么会计科目
  • 管理会计的职能作用是
  • mysql声明全局变量
  • asp.net 使用SqlBulkCopy极速插入数据到 SQL Server
  • xp系统怎么弄成win7
  • windows2003怎么样
  • linux lftp命令
  • ias.exe是什么程序
  • win7网卡驱动怎么卸载
  • win7升级win8.1
  • surface使用
  • shell脚本中执行echo卡住
  • js响应式布局
  • promise实例方法
  • 完美解决mac环境异常
  • node优秀库
  • unity的gui
  • 安卓多点触屏在哪里设置
  • 南宁市税局官网
  • 钢结构蔬菜大棚造价多少钱一平方
  • 福建税务网址
  • 税务局函调情况说明
  • 企业获得的保险公司保险赔偿款收入
  • 河北省电子税务局手机登录入口
  • 广东发票勾选认证操作流程
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设