TypeScript 4.0 发布
TypeScript 4.0 现已正式发布,该版本没有重大的突破性变化。TypeScript 团队表示新版本继续使用与过去版本相似的版本控制模型,可将 4.0 视作 3.9 的延续升级版本。而且他们也一直在追求不牺牲主要灵活性的情况下,提供一个最大限度减少 breaking changes 的升级路径。
事实上,如果你是这个语言的新手,现在是开始使用它的最好时机。社区已经在这里了,而且还在增长,有工作代码和伟大的新资源可以学习。有一点要记住:尽管我们在 4.0 中带来了所有的好东西,但你真的只需要知道 TypeScript 的基础知识就可以了。
4.0 版本的主要更新内容如下:
- 可变参数元组类型
- 标记的元组元素
- 构造函数的类属性推断
- 短路分配运算符
catch
子句中的unknown
- 定制 JSX 工厂
- 带
--noEmitOnError
参数build
模式下的速度提升 --incremental
with--noEmit
- 编辑器改进
- 转换为可选链接
- 支持
/** @deprecated */
- 启动时的部分编辑模式
- 更智能的自动导入
- Breaking Changes
构造函数的类属性推断
当 noImplicitAny 被启用时,TypeScript 4.0 现在可以使用控制流分(control flow analysis)析来确定类中的属性类型。
class Square { // Previously: implicit any! // Now: inferred to `number`! area; sideLength; constructor(sideLength: number) { this.sideLength = sideLength; this.area = sideLength ** 2; } }
如果并非将构造函数的所有路径都分配给实例成员,则该属性可能被视为undefined
。
class Square { sideLength; constructor(sideLength: number) { if (Math.random()) { this.sideLength = sideLength; } } get area() { return this.sideLength ** 2; // ~~~~~~~~~~~~~~~ // error! Object is possibly 'undefined'. } }
在更清楚的情况下(例如具有某种initialize
方法),如果位于strictPropertyInitialization
中,可能会需要显式类型注释以及定值赋值断言(!
)
class Square { // definite assignment assertion // v sideLength!: number; // ^^^^^^^^ // type annotation constructor(sideLength: number) { this.initialize(sideLength) } initialize(sideLength: number) { this.sideLength = sideLength; } get area() { return this.sideLength ** 2; } }
短路分配运算符
JavaScript 和其他很多语言都支持复合赋值运算符。复合赋值运算符将一个运算符应用到两个参数上,然后将结果赋值到左边。如下:
/ Addition // a = a + b a += b; // Subtraction // a = a - b a -= b; // Multiplication // a = a * b a *= b; // Division // a = a / b a /= b; // Exponentiation // a = a ** b a **= b; // Left Bit Shift // a = a << b a <<= b;
JavaScript 中的许多运算符都有一个对应的赋值运算符,但有三个例外:逻辑和(&&
)、逻辑或(||
),以及空值合并(??
)。
TypeScript 4.0 为上述三个运算符增加了对应的赋值运算符支持:
let values: string[]; // Before (values ?? (values = [])).push("hello"); // After (values ??= []).push("hello");
a ||= b; // actually equivalent to a || (a = b);
详情可查看发布公告。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
MariaDB 10.5.5 发布
MariaDB 10.5.5 已经发布,MariaDB 10.5 是 MariaDB 当前的稳定系列,具有一些全新特性,并且具有从 MySQL 反向移植和重新实现的特性。 此版本主要变化包括: 修复了 FLUSH TABLES…FOR EXPORT中的死锁 修复了MariaDB 10.5.4中引入的性能下降问题 ALTER TABLE 修复 Mariadb 服务在运行且操作系统日期时间向后更新时不会关闭 修复了删除缓冲中的损坏 正确执行从属设备的主从自动重新连接,以始终通过初始连接的所有步骤 RESET MASTER TO当值超过允许的最大值 2147483647时,正确处理 在 EXPLAIN FORMAT = JSON 输出中使 LATERAL DERIVED 表可见 此版本还弃用了一些变量: innodb_thread_concurrency innodb_commit_concurrency innodb_replication_delay innodb_concurrency_tickets innodb_thread_sleep_delay innodb_adaptive_...
- 下一篇
clop v0.0.11 版本发布,Golang 实现的命令行解析器
项目地址 https://gitee.com/guonaihong/clop https://github.com/guonaihong/clop 本次更新内容 如果输入错误选项,会推荐正确选项 示例代码 package main import ( "fmt" "github.com/guonaihong/clop" ) type T struct { Num int `clop:"--num" usage:"a"` Rate int `clop:"--rate" usage:"b"` } func main() { t := T{} clop.Bind(&t) fmt.Printf("%d:%d\n", clop.GetIndex("a"), clop.GetIndex("b")) fmt.Printf("%v\n", t) } 输出 ./t --number error: Found argument '--number' which wasn't expected, or isn't valid in thi...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- CentOS关闭SELinux安全模块
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS7设置SWAP分区,小内存服务器的救世主
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2整合Thymeleaf,官方推荐html解决方案