Typescript 5.0 发布:快速概览

这篇具有很好参考价值的文章主要介绍了Typescript 5.0 发布:快速概览。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

探索最令人兴奋的功能和更新

作为一种不断发展的编程语言,TypeScript 带来了大量的改进和新功能。在本文中,我们将深入探讨 TypeScript 的最新版本 5.0,并探索其最值得关注的更新。

1. 装饰器

TypeScript 5.0 引入了一个重新设计的装饰器系统,改进了类型检查和元数据生成。装饰器现在更加无缝地与类型系统配合,使您能够编写更干净、更健壮的代码。以下是一个简单的方法装饰器的示例:

function log<This, Args extends any[], Return>(
  target: (this: This, ...args: Args) => Return,
  context: ClassMethodDecoratorContext<
    This,
    (this: This, ...args: Args) => Return
  >
) {
  const methodName = String(context.name);

  function replacementMethod(this: This, ...args: Args): Return {
    console.log(`LOG: Entering method '${methodName}'.`);
    const result = target.call(this, ...args);
    console.log(`LOG: Exiting method '${methodName}'.`);
    return result;
  }

  return replacementMethod;
}

class Calculator {
  @log
  add(a: number, b: number): number {
    return a + b;
  }
}

const calculator = new Calculator();
console.log(calculator.add(2, 3)); 
// "LOG: Entering method 'add'." 
// "LOG: Exiting method 'add'." 
// 5 

在这个例子中,@log 装饰器在每次调用方法时记录方法名。除了方法装饰器,TypeScript 5.0 还支持自动访问器装饰器、getter 和 setter 装饰器等。您可以在这个快速指南中了解更多:

TypeScript 5.0 装饰器快速指南

使用装饰器扩展您的 TypeScript 5.0 工具包

2. const 类型参数

在 TypeScript 5.0 之前,它的推断通常会选择更一般的类型,例如将 ["Alice", "Bob", "Eve"] 推断为 string[],如果您想要更具体的类型,则必须为其添加 as const

// string[]
const a = ["Alice", "Bob", "Eve"]

// readonly ["Alice", "Bob", "Eve"]
const b = ["Alice", "Bob", "Eve"] as const

而 TypeScript 5.0 允许您在类型参数声明中添加 const 修饰符:

declare function fnGood<const T extends readonly string[]>(args: T): void;

// T is readonly ["a", "b", "c"]
fnGood(["a", "b" ,"c"]);

但请记住,const 修饰符仅影响在调用中编写的对象、数组和原始表达式的推断,因此无法(或无法)通过 as const 修改的参数不会看到任何行为上的变化:

declare function fnGood<const T extends readonly string[]>(args: T): void;
const arr = ["a", "b" ,"c"];

// 'T' is still 'string[]'-- the 'const' modifier has no effect here
fnGood(arr);

3. 支持在 extends 中使用多个配置文件

TypeScript 5.0 可以在您的 tsconfig.json 中扩展多个配置文件。此功能使得在项目之间共享和管理配置更加容易。以下是如何使用多个配置文件的示例:

{
  "extends": ["./config/base", "./config/jest"],
  "compilerOptions": {
    "target": "esnext",
    "module": "commonjs",
    "strict": true
  }
}

在这个例子中,配置文件扩展了 base 和 jest 配置,允许您根据需要组合和覆盖设置。

4. 所有枚举都是联合枚举

在 TypeScript 5.0 中,所有枚举现在都被视为联合枚举。联合枚举提供了更好的类型安全性和更好的人机工程学,以处理枚举值。以下是一个示例:

enum E {
  A = 10 * 10, // Numeric literal enum member
  B = 'foo', // String literal enum member
  C = Math.random(), // Opaque computed enum member
}

function getStringValue(e: E): string {
  return String(e);
}

const val = getStringValue(E.A); // "100"

TypeScript 5.0 通过为每个计算成员创建唯一类型来将所有枚举转换为联合枚举。这意味着现在所有枚举都可以被缩小并且其成员也可以被引用为类型。

5. — moduleResolution bundler

TypeScript 5.0 引入了一个名为 bundler 的新模块解析策略。这个策略旨在与打包程序(如 WebpackRollup)配合使用,从而实现更高效、更流畅的构建过程(就像过去在 Node.js 模块中的任何相对导入都需要包括文件扩展名一样)。 要启用 bundler 模块解析策略,请在 tsconfig.json 中使用以下配置:

{
  "compilerOptions": {
    "moduleResolution": "bundler"
  }
}

6. 解析自定义标志

TypeScript 5.0 添加了几个新标志来自定义模块解析过程。这些标志提供了更细粒度的控制,以控制模块是如何解析的,使您能够微调构建过程。以下是一个简要概述:

  • --allowImportingTsExtensions:允许导入带有 TypeScript 特定扩展名(如 .ts、.mts 或 .tsx)的 TypeScript 文件。
  • --resolvePackageJsonExports:强制 TypeScript 在从 node_modules 中的包中读取时,查看 package.json 文件的 exports 字段。
  • --resolvePackageJsonImports:强制 TypeScript 在从以 # 开头的查找开始时,查看 package.json 文件的 imports 字段。
  • --allowArbitraryExtensions:允许通过查找以 {file basename}.d.{extension}.ts 格式的声明文件来导入具有未知扩展名的文件。
  • --customConditions:在 TypeScript 从 package.json 的 exports 或 imports 字段解析时,采用额外的条件列表。

7. --verbatimModuleSyntax

TypeScript 5.0 中的新 --verbatimModuleSyntax 标志允许您在发出 JavaScript 代码时保留原始模块语法。这个特性在与打包程序一起工作时特别有用,因为它可以防止需要额外的转换。例如:

// Erased away entirely.
import type { A } from "a";

// Rewritten to 'import { b } from "bcd";'
import { b, type c, type d } from "bcd";

// Rewritten to 'import {} from "xyz";'
import { type xyz } from "xyz";

要启用此标志,请将其添加到您的 tsconfig.json

{
  "compilerOptions": {
    "verbatimModuleSyntax": true
  }
}

8. 支持 export type *

TypeScript 5.0 引入了对 export type * 语法的支持,允许您重新导出另一个模块中的所有类型。这种语法特别适用于创建仅包含类型的模块或聚合来自多个源的类型。以下是一个示例:

// types.ts
export type { Foo } from './foo';
export type { Bar } from './bar';

// index.ts
export type * from './types';
// Also support
export type * as Types from './types';

在这个例子中,index.ts 模块使用 export type * 语法重新导出了 types.ts 模块中的所有类型。

9. JSDoc 中的 @satisfies 支持

TypeScript 5.0 中的新 @satisfies JSDoc 标签使您能够指定函数实现满足特定接口。这个特性在使用结构类型或使用 TypeScript 对 JavaScript 代码进行类型检查时特别有用。以下是一个示例:

// interface Greeter {
//   greet(name: string): number;
// }

/**
 * @typedef {Function} Greeter
 * @param {string} name
 * @returns {string}
 */

/**
 * @satisfies {Greeter}
 */
function greeter(name: string) {
  return `Hello, ${name}!`;
}

在这个例子中,greeter 函数带有 @satisfies JSDoc 标签,表示它满足 Greeter 接口。

10. JSDoc中的@overload支持

TypeScript 5.0添加了对@overload JSDoc标签的支持,允许您为JavaScript代码中的单个实现定义多个函数签名。当处理需要支持多种参数类型或形状的复杂函数时,此功能特别有用。以下是一个示例:

/**
 * @overload
 * @param {string} a
 * @param {string} b
 * @return {string}
 */

/**
 * @overload
 * @param {number} a
 * @param {number} b
 * @return {number}
 */

/**
 * @param {string | number} a
 * @param {string | number} b
 */
export function add(a, b) {
  if (typeof a === 'number' && typeof b === 'number') {
    return a + b;
  } else if (typeof a === 'string' && typeof b === 'string') {
    return a.concat(b);
  }
}

const numResult = add(1, 2); // 3
const strResult = add('hello', 'world'); // "helloworld"
const errResult = add('hello', 123); // Error: No overload matches this call.

在此示例中,add函数用两个@overload JSDoc标记标记,指定它可以处理数字和字符串作为参数。

11. 在--build下传递特定于emit的标志

TypeScript 5.0引入了在使用--build标志时传递特定于emit的标志的能力。此功能允许您在构建项目时微调输出,从而对构建过程进行更精细的控制。一些新闻:

  • --declaration:从项目中的TypeScript和JavaScript文件生成.d.ts文件。
  • --emitDeclarationOnly:仅输出d.ts文件而不是JavaScript文件。
  • --declarationMap:为d.ts文件创建源映射。
  • --sourceMap:为发出的JavaScript文件创建源映射文件。
  • --inlineSourceMap:将源映射文件包含在发出的JavaScript中。

12. 编辑器中的大小写不敏感导入排序

TypeScript 5.0通过使导入排序不区分大小写来改进编辑器中的导入排序。这种改变导致组织导入时出现更自然和直观的排序顺序,从而产生更清晰和可读的代码。

13. 完整的switch/case自动完成

TypeScript 5.0通过提供完整的switch/case自动完成增强了代码完成体验。在使用联合类型时,编辑器现在可以建议所有可能的情况,减少错过情况的机会,使编写全面的switch语句更容易。以下是一个示例:

type Animal = "cat" | "dog" | "fish";

function speak(animal: Animal): string {
  switch (animal) {
    // TypeScript 5.0 will suggest all possible cases: "cat", "dog", "fish"
  }
}

14. 速度、内存和包大小优化

TypeScript 5.0带来了各种性能优化,包括更快的类型检查、减少的内存使用和更小的包大小。这些改进使使用TypeScript更加愉快,确保平稳高效的开发体验。

15. 破坏性变化和弃用

与任何主要版本发布一样,TypeScript 5.0引入了一些破坏性变化和弃用。在升级之前,仔细查看发行说明并彻底测试您的项目是至关重要的。一些值得注意的破坏性变化包括:

  • 运行时要求:TypeScript现在针对ECMAScript 2018。TypeScript包还设置了最低期望引擎为12.20。对于Node用户,这意味着TypeScript 5.0的最低版本要求至少是Node.js 12.20及更高版本。
  • lib.d.ts更改:对如何生成DOM类型的更改可能会对现有代码产生影响。值得注意的是,某些属性已从number转换为数字文字类型,并且有关剪切、复制和粘贴事件处理的属性和方法已移动到不同的接口。
  • API Breaking Changes:已移至模块,删除了一些不必要的接口并进行了一些正确性改进。
  • 禁止在关系运算符中进行隐式强制类型转换:
function func1(ns: number | string) {
  return ns * 4; // Error, possible implicit coercion
}

function func2(ns: number | string) {
  return ns > 4; // Error, possible implicit coercion
}

function func3(ns: number | string) {
  return +ns > 4; // OK
}
  • 枚举重大改进:在TypeScript 5.0中,您将不会看到那些枚举奇怪的问题,以下是两个重要的错误改进:
// Part1: Assigning an out-of-domain literal to an enum type 
// now errors out as one would expect.
enum SomeEvenDigit {
  Zero = 0,
  Two = 2,
  Four = 4,
}

// Now correctly an error
let m: SomeEvenDigit = 1;

// Part2: Enums declaring values with mixed numeric and 
// indirect string enum references incorrectly create an all-numeric enum.
enum Letters {
  A = 'a',
}
enum Numbers {
  one = 1,
  two = Letters.A,
}

// Now correctly an error
const t: number = Numbers.two;
  • 在—experimentalDecorators下更准确的参数装饰器类型检查(在构造函数中)
  • 一些已弃用的配置和配置值

结论

总之,TypeScript 5.0带来了许多功能和改进,那么哪个功能最有用呢?文章来源地址https://www.toymoban.com/news/detail-454388.html

到了这里,关于Typescript 5.0 发布:快速概览的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • RocketMQ 5.0 快速入门

    Apache RocketMQ 自诞生以来,因其架构简单、业务功能丰富、具备极强可扩展性等特点被众多企业开发者以及云厂商广泛采用。历经十余年的大规模场景打磨,RocketMQ 已经成为业内共识的金融级可靠业务消息首选方案,被广泛应用于互联网、大数据、移动互联网、物联网等领域的

    2024年02月16日
    浏览(38)
  • 探索容器化世界:开源容器生态系统概览 | 开源专题 No.61

    Stars: 15.7k License: Apache-2.0 ingress-nginx 是一个使用 NGINX 作为反向代理和负载均衡器的 Kubernetes Ingress 控制器。该项目具有以下核心优势: 使用 NGINX 作为反向代理和负载均衡器 支持多个版本,包括 1.9.1、1.8.2 等 提供详细的变更日志以及支持文档 Stars: 66.8k License: Apache-2.0 Moby 是一

    2024年01月20日
    浏览(56)
  • 重建即单体,重建大师5.0发布 模方3.0单体化功能永久免费

    今年8月,自然资源部出台了《实景三维中国建设技术大纲(2021)》,意味着实景三维的蓝图全面铺开 。同时开展实景三维中国建设又是“十四五”时期基础测绘转型升级发展的重要任务。除此之外,李德仁院士也表示在新基建建设过程中,需要建立智慧城市、智慧产业从而

    2024年02月03日
    浏览(45)
  • 鸿蒙5.0发布时间已定!何处寻得移动开发加速器?

    直接在百度上搜索「鸿蒙5.0发布时间」,出来的结果,那一个比一个焦虑~~ 百度的AI基于综合内容判断得出,鸿蒙5.0的发布时间在2023-04-17 百度知道推的答案是202年年4月中 但不管几月,“鸿蒙元年”似乎都是确定的,就是2024年。 因为,华为放话:鸿蒙5.0不再支持安卓操作系

    2024年01月25日
    浏览(43)
  • Linux服务器快速安装MongoDB-5.0

    最近开始体验FastGPT开源知识库问答系统,用他们试着开发调试一些小助手。这中间需要使用到MongoDB,就在自己服务器上进行了安装,特此记录下。 环境说明:阿里云ECS,2核8G,X86架构,CentOS 7.9操作系统。 1.打开MongoDB社区版下载页面,选择我们想要安装的版本、操作系统、

    2024年02月04日
    浏览(64)
  • JDK 21 发布,新特性概览及字符串模板详细介绍

    Java 21 已于 2023 年 9 月 19 日发布,是 Oracle 标准 Java 实现的下一个长期支持(LTS)版本。Java 21 具有以下 15 项新特性。 430: String Templates (Preview) 字符串模板,可以像其他语言那样子方便的做字符串拼接,是+号,StringBuilder,MessageFormat之外更方便的字符串拼接方法。 431: Sequenc

    2024年02月02日
    浏览(54)
  • 新增WebDB和ChatGPT组件,支持对ChatGPT资产进行纳管,JumpServer堡垒机v3.5.0发布

    2023年7月24日,JumpServer开源堡垒机正式发布v3.5.0版本。在这一版本中,新生代数据库连接组件——问题终结者Chen强势来袭,替代原有的OmniDB组件,在兼容旧版本的同时,解决了旧组件性能不足的问题,为用户提供更稳定、更强大、更持久的服务支持。 同时,JumpServer开源项目

    2024年02月16日
    浏览(50)
  • 探索 TypeScript 元组的用例

    元组扩展了数组数据类型的功能。使用元组,我们可以轻松构造特殊类型的数组,其中元素相对于索引或位置是固定类型的。由于 TypeScript 的性质,这些元素类型在初始化时是已知的。使用元组,我们可以定义可以存储在数组中每个位置的数据类型。 在本教程中,我们将介绍

    2024年02月13日
    浏览(39)
  • 新增守护进程管理、支持添加MySQL远程数据库,支持PHP版本切换,1Panel开源面板v1.5.0发布

    2023年8月14日,现代化、开源的Linux服务器运维管理面板1Panel正式发布v1.5.0版本。 在这个版本中,1Panel新增了守护进程管理功能;支持添加MySQL远程数据库;支持添加FTP/S和WebDAV的SFTP服务;支持PHP版本切换。此外,我们进行了40多项功能更新和问题修复。1Panel应用商店也新增了

    2024年02月13日
    浏览(48)
  • LLM大语言模型助力DataEase小助手,新增气泡地图,DataEase开源数据可视化分析平台v2.5.0发布

    2024年4月8日,DataEase开源数据可视化分析平台正式发布v2.5.0版本。 这一版本的功能升级包括:新增DataEase小助手支持,通过结合智能算法和LLM(即Large Language Model,大语言模型)能力,DataEase小助手能够准确抓取用户提问的关键信息,针对用户疑问给出高质量的回答,帮助用户

    2024年04月16日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包