博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
TypeScript 4.0 发布
阅读量:4033 次
发布时间:2019-05-24

本文共 2005 字,大约阅读时间需要 6 分钟。

喜欢就关注我们吧!

整体看来,此版本在兼容性方面没有特别大的变化。因为 TypeScript 团队表示新版本继续使用与过去版本相似的版本控制模型,可将 4.0 视作 3.9 的延续升级版本。

而且他们也一直在追求不牺牲主要灵活性的情况下,提供一个最大限度减少 breaking changes 的升级路径。

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 + ba += b;// Subtraction// a = a - ba -= b;// Multiplication// a = a * ba *= b;// Division// a = a / ba /= b;// Exponentiation// a = a ** ba **= b;// Left Bit Shift// a = a << ba <<= b;

JavaScript 中的许多运算符都有一个对应的赋值运算符,但有三个例外:逻辑和(&&)、逻辑或(||),以及空值合并(??)。

TypeScript 4.0 为上述三个运算符增加了对应的赋值运算符支持:

let values: string[];// Before(values ?? (values = [])).push("hello");// After(values ??= []).push("hello");
a ||= b;// actually equivalent toa || (a = b);

▼  往期精彩回顾 ▼

                  

觉得不错,请点个在看呀

转载地址:http://cezdi.baihongyu.com/

你可能感兴趣的文章
Flex动态获取flash资源库文件
查看>>
flex中设置Label标签文字的自动换行
查看>>
Flex 中的元数据标签
查看>>
flex4 中创建自定义弹出窗口
查看>>
01Java基础语法-11. 数据类型之间的转换
查看>>
01Java基础语法-13. if分支语句的灵活使用
查看>>
01Java基础语法-15.for循环结构
查看>>
01Java基础语法-16. while循环结构
查看>>
01Java基础语法-17. do..while循环结构
查看>>
01Java基础语法-18. 各种循环语句的区别和应用场景
查看>>
01Java基础语法-19. 循环跳转控制语句
查看>>
Django框架全面讲解 -- Form
查看>>
socket,accept函数解析
查看>>
今日互联网关注(写在清明节后):每天都有值得关注的大变化
查看>>
”舍得“大法:把自己的优点当缺点倒出去
查看>>
[今日关注]鼓吹“互联网泡沫,到底为了什么”
查看>>
[互联网学习]如何提高网站的GooglePR值
查看>>
[关注大学生]求职不可不知——怎样的大学生不受欢迎
查看>>
[关注大学生]读“贫困大学生的自白”
查看>>
[互联网关注]李开复教大学生回答如何学好编程
查看>>