TypeScript 4.8 RC 发布

翻译能力有限,请谅解

TypeScript 4.8 首个 RC 已发布。开发团队表示,从现在开始到发布 TypeScript 4.8 稳定版本,预计除了修复重要错误之外不会有进一步的变化。

主要更新内容包括:

改进交叉类型、联合类型兼容性,以及类型收窄功能改进对infer模板字符串类型中的类型推理增强--build,--watch--incremental 性能优化比较对象和数组字面量时的错误提示改进绑定类型中的类型推导修复文件监视功能(尤其是跨 git checkout的场景)增强 Find-All-References 性能从自动导入中排除特定文件正确性修复和兼容性变化交叉类型与联合类型的类型收窄增强

TypeScript 4.8 版本对 --strictNullChecks 进行了进一步增强,主要体现在联合类型与交叉类型,以及类型收窄地表现上。

举例来说,作为 TypeScript 类型系统中的 Top Type ,unknown 类型包含所有的其他类型,实际上 unknown 和 {} | null | undefined 的效果是一致的:独特意义的 null、undefined 类型,加上万物起源的 {}。

模板字符串类型中的 infer 提取

在 4.7 版本中 TypeScript 支持了 infer extends 语法,使得我们可以直接一步就 infer 到预期类型的值,而不需要再次进行条件语句判断:

type FirstString<T> =

T extends [infer S, ...unknown[]]

? S extends string ? S : never

: never;

// 基于 infer extends

type FirstString<T> =

T extends [infer S extends string, ...unknown[]]

? S

: never;

4.8 版本在此基础上进行了进一步地增强,当 infer 被约束为一个原始类型,那么它现在会尽可能将 infer 的类型信息推导到字面量类型的级别:

// 此前为 number,现在为 '100'

type SomeNum = "100" extends `${infer U extends number}` ? U : never;

// 此前为 boolean,现在为 'true'

type SomeBool = "true" extends `${infer U extends boolean}` ? U : never;同时,TypeScript 会检查提取出的值能否重新映射回初始的字符串,如 SomeNum 中会检查 String(Number("100")) 是否等于 "100",在下面这个例子中就是因为无法重新映射回去,而导致只能推导到 number 类型:

// String(Number("1.0")) → "1",≠ "1.0"

type JustNumber = "1.0" extends `${infer T extends number}` ? T : never;

绑定类型中的类型推导

TypeScript 中的泛型填充也会受到其调用方的影响,如以下示例:

declare function chooseRandomly<T>(x: T,): T;

const res1 = chooseRandomly(["linbudu", 599, false]);此时 res1 的类型与函数的泛型 T 会被推导为 Array<string | number | boolean>,但如果我们换一个方法:

declare function chooseRandomly<T>(x: T,): T;

const [a, b, c] = chooseRandomly(["linbudu", 599, false]);此时 a、b、c 被推导为了 string、number、boolean 类型,也就是说此时函数的泛型被填充为 [string, number, boolean] 这么个元组类型。

这一泛型填充方式被称为绑定模式(Binding Pattern),而在 4.8 版本中,禁用了基于绑定模式的类型推导,因为其对泛型的影响并不始终正确:

declare function f<T>(x?: T): T;

const [x, y, z] = f();原文:

https://devblogs.microsoft.com/typescript/announcing-typescript-4-8-rc/

相关文章

所以很多人都会选择将这些生活琐事来交给智能化产品,在众多...
“昨天的经历都将成为明天的力量。” 将绝大部分精力都奉献给...
最近,全球知名的通信产业盛会MWC 2024(2024世界移动通信大...
今年上半年有很多值得关注的机型,其中华为最新的影像旗舰华...
目前,2024世界移动通信大会(MWC)正在西班牙巴塞罗那举行,值...
就在去年,真我推出了11 Pro+,用一个2亿像素传感器和zoom变...