根据 TypeScript 路线图,TypeScript 5.3 计划于 11 月 14 日发布 。
文章插图
下面是该版本带来的新特性:
- 导入属性
- 导入类型中稳定支持 resolution-mode
- 所有模块模式均支持 resolution-mode
- switch (true) 缩小范围
- 对布尔值进行比较的缩小范围
- 通过 Symbol.hasInstance 进行 instanceof 类型缩小
- 实例字段上的 super 属性访问检查
- 嵌入提示支持跳转到类型的定义
- 通过跳过 JSDoc 解析进行优化
- 通过比较非标准交集进行优化
- 整合 tsserverlibrary.js 和 typescript.js
// 希望将这个文件解释为 JSON 数据,而不是一个带有 .json 扩展名的可执行/恶意的 JAVAScript 文件 。import obj from "./something.json" with { type: "json" };
这些属性的内容不会被 TypeScript 检查 , 因为它们是特定于宿主环境的,并且会被直接保留 , 以便浏览器和运行时环境可以处理它们(并可能会出现错误) 。// TypeScript 对此没有问题 , 但是浏览器可能不支持 。import * as foo from "./foo.js" with { type: "fluffy bunny" };
动态 import() 调用还可以通过第二个参数使用导入属性 。const obj = await import("./something.json", {with: { type: "json" }});
第二个参数的预期类型由名为 ImportCallOptions 的类型定义,该类型默认情况下只需要一个名为 with 的属性 。注意,导入属性是早期提案“导入断言”的演进版本,该提案已在 TypeScript 4.5 中实现 。最明显的区别是使用 with 关键字而不是 assert 关键字 。但不太明显的区别在于,现在运行时可以自由地使用属性来引导导入路径的解析和解释 , 而导入断言只能在加载模块后断言某些特征 。
随着时间的推移 , TypeScript 将逐渐弃用旧的导入断言语法,并倾向于使用导入属性的提案语法 。现有使用 assert 的代码应该迁移到使用 with 关键字 。需要使用导入属性的新代码应该使用 with 。
resolution-mode导入类型中稳定支持 resolution-mode在 TypeScript 4.7 中,TypeScript 增加了对 /// <reference types="..." /> 中的 resolution-mode 属性的支持,以控制特定规范符号是应该通过 import 还是 require 语义进行解析 。
/// <reference types="pkg" resolution-mode="require" />// 或/// <reference types="pkg" resolution-mode="import" />
考虑到导入属性可以引导解析,并且已经看到了合理的使用案例,TypeScript 5.3 现在支持 import type 的 resolution-mode 属性 。// 以使用 `require()` 进行导入的方式解析 `pkg`import type { TypeFromRequire } from "pkg" with {"resolution-mode": "require"};// 以使用 `import` 进行导入的方式解析 `pkg`import type { TypeFromImport } from "pkg" with {"resolution-mode": "import"};export interface MergedType extends TypeFromRequire, TypeFromImport {}
这些导入属性也可以用于 import() 类型 。export type TypeFromRequire =import("pkg", { with: { "resolution-mode": "require" } }).TypeFromRequire;export type TypeFromImport =import("pkg", { with: { "resolution-mode": "import" } }).TypeFromImport;export interface MergedType extends TypeFromRequire, TypeFromImport {}
所有模块模式均支持 resolution-mode以前,只有在 moduleResolution 选项为 node16 和 nodenext 时才允许使用 resolution-mode 。为了更容易地专门查找用于类型的模块,现在 resolution-mode 在所有其他 moduleResolution 选项中都能正常工作,比如 bundler、node10,在 classic 模式下则不会报错 。类型缩小优化switch (true)现在 TypeScript 5.3 能够根据 switch 中每个 case 子句的条件进行类型细化 。
推荐阅读
- JDK11 升级 JDK17 最全实践干货来了
- Lisa豪门梦碎后,妆造又黑又丑,参加疯马秀的报应来了?
- 《歌手2024》首发名单曝光,林俊杰终于来了,但夺冠有压力
- “二手市场”成女明星的照妖镜,谁没底线、谁割韭菜,全照出来了
- 王菲现身机场,小腹隆起疑似怀孕,她和谢霆锋终于盼来了这一天
- 梦见孩子回来了是什么意思周公解梦 梦见孩子回来了是什么意思
- 时隔四年,德云社再度举办纲丝节,节目单已经发布,能来的都来了
- 刀郎被迫取消演唱会的真相来了
- “二手平台”成女明星的照妖镜,谁割韭菜,谁没底线,全照出来了
- 11月7日那英定居英国的真相来了