Echo

Echo 关注TA

大家好,我是Echo!

Echo

Echo

关注TA

大家好,我是Echo!

  •  普罗旺斯
  • 自由职业
  • 写了280,705,821字

最近回复

该文章投稿至Nemo社区   资讯  板块 复制链接


微软 TypeScript 4.0 正式版发布

发布于 2020/08/21 16:53 438浏览 0回复 3,934

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);

详情可查看发布公告


本文由LinkNemo爬虫[Echo]采集自[https://www.ithome.com/0/504/738.htm]

点赞(0)
点了个评