TypeScript又出新关键字了?

typescript,出新,关键字 · 浏览次数 : 276

小编点评

**TypeScript 5.2中的 using关键字** using关键字是 TypeScript 5.2 中引入的一个新的关键字,它可以用来管理文件句柄、数据库连接等资源。 **使用场景** using关键字可以用于: - 管理文件句柄 - 管理数据库连接 - 管理其他资源 **示例** ```typescript const getResource = () => { return { [Symbol.dispose]: () => { console.log('Hooray!') } }; }; const { filehandle, [Symbol.asyncDispose]: async () => {...} } = await using(getResource()); ``` **使用 Symbol.disposeSYMBOL 关键字** Symbol.disposeSymbol 是一个新的全局 Symbol。任何具有分配给 Symbol.dispose函数的东西都将被视为“资源”。可以使用 `Symbol.dispose` 方法处置资源,并在资源离开作用域时调用 `Symbol.disposeSymbol.dispose` 方法。 **注意** using关键字可以简化资源管理代码,并确保资源在程序继续之前关闭。

正文

TypeScript 5.2将引入一个新的关键字:using。当它离开作用域时,你可以用Symbol.dispose函数来处置任何东西。

{
  const getResource = () => {
    return {
      [Symbol.dispose]: () => {
        console.log('Hooray!')
      }
    }
  }
  using resource = getResource();
} // 'Hooray!' logged to console

这是基于TC39提议,该提议最近达到了第三阶段,表明它即将进入JavaScript。

using将对管理文件句柄、数据库连接等资源非常有用。

Symbol.dispose

Symbol.dispose是JavaScript中一个新的全局symbol。任何具有分配给Symbol.dispose函数的东西都将被视为"资源":也就是具有特定生命周期的对象。并且该资源可以使用using关键字。

const resource = {
  [Symbol.dispose]: () => {
    console.log("Hooray!");
  },
};

await using

你也可以使用Symbol.asyncDisposeawait来处理那些需要异步处置的资源。

const getResource = () => ({
  [Symbol.asyncDispose]: async () => {
    await someAsyncFunc();
  },
});
{
  await using resource = getResource();
}

这将在继续之前等待Symbol.asyncDispose函数。

这对数据库连接等资源来说很有用,你要确保在程序继续前关闭连接。

使用案例

文件句柄

通过节点中的文件处理程序访问文件系统,使用using可能会容易得多。

不使用using

import { open } from "node:fs/promises";
let filehandle;
try {
  filehandle = await open("thefile.txt", "r");
} finally {
  await filehandle?.close();
}

使用using

import { open } from "node:fs/promises";
const getFileHandle = async (path: string) => {
  const filehandle = await open(path, "r");
  return {
    filehandle,
    [Symbol.asyncDispose]: async () => {
      await filehandle.close();
    },
  };
};
{
  await using file = getFileHandle("thefile.txt");
  // Do stuff with file.filehandle
} // Automatically disposed!

数据库连接

管理数据库连接是在C#中使用using的一个常见用例。

不使用using

const connection = await getDb();
try {
  // Do stuff with connection
} finally {
  await connection.close();
}

使用using

const getConnection = async () => {
  const connection = await getDb();
  return {
    connection,
    [Symbol.asyncDispose]: async () => {
      await connection.close();
    },
  };
};
{
  await using { connection } = getConnection();
  // Do stuff with connection
} // Automatically closed!

图片示例

下图是上面示例的图片版本:

await-using.jpg

总结

本文简要介绍了TypeScript5.2中引入的新关键字using,它的出现可以很好的和Symbol.dispose搭配使用。有了它我们便不需要在try…catch语句中进行数据库的关闭,这对管理文件句柄、数据库连接等资源时非常有用。

以上就是本文的全部内容,如果对你有所启发,欢迎点赞、收藏、转发~

与TypeScript又出新关键字了?相似的内容:

TypeScript又出新关键字了?

TypeScript 5.2将引入一个新的关键字:`using`。当它离开作用域时,你可以用`Symbol.dispose`函数来处置任何东西。 ```jsx { const getResource = () => { return { [Symbol.dispose]: () => { conso

基于SqlSugar的开发框架循序渐进介绍(18)-- 基于代码生成工具Database2Sharp,快速生成Vue3+TypeScript的前端界面和Winform端界面

我们开发一个系统,在保证风格统一、代码强壮、可读性强等基础上,还能够结合代码生成工具快速开发相关后端,以及各种前端界面的,无疑是非常好的,既保证了项目的代码质量,又能够极大的提高开发效率。代码生成工具Database2Sharp是在完善的开发项目上,抽取出数据变化的部分,通过演绎、归纳、反复演绎和归纳等提炼方式抽取出相关的规则,以工具的方式来快速提高生产率,使得我们在开发各种不同的项目上的时候,能

如何使用Node.js、TypeScript和Express实现RESTful API服务

Node.js是一个基于 Chrome V8 引擎的 JavaScript 运行环境。Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。Express是一个保持最小规模的灵活的 Node.js Web应用程序开发框架,为Web和移动应用程序提供一组强大的功能。使用Node

TypeScript数据类型

目录TypeScript数据类型基础数据类型number、string、boolean、 null 和 undefined、object其他数据类型元组 []枚举 enum接口 interface联合类型 |交叉类型 &type声明面向对象类class继承extends其他类型推断类型断言 as总结

TypeScript入门介绍

目录TypeScript入门介绍什么是 TypeScript?发展历史优缺点应用场景开发工具环境依赖编程IDEvs调试构建工具/工程化步骤汇总第一个项目 TypeScript入门介绍 什么是 TypeScript? 1.1 TypeScript 是由微软开发的一种开源的编程语言。它是 JavaScr

为什么我反对过度使用TypeScript?

大家好, 我前夕. TypeScript在今天早已无人不知, 但是我认为TypeScript的使用应该遵循中庸之道. 要使用, 但不要过度使用.

Typescript 回调函数、事件侦听的类型定义与注释--拾人牙慧

实际项目中会运到的 Typescript 回调函数、事件侦听的类型定义,如果刚碰到会一脸蒙真的,我就是 这是第一次我自己对 Typescript 记录学习,所以得先说一下我与 Typescript 的孽缘 记得最早是在2014年遇上 Typescript 当时是完全看不上这东西的,甚至带着鄙视的心态

typescript 解决变量多类型访问属性报错--工作随记

一个变量类型允许是多个类型,如果访问某个类型的属性,编辑器会直接提示错误 比如 变量 tuple 可能为string 或 number 类型,如果直接访问tuple.toFixed const mixedTupleTypeArray: (string|number)[] = ['hello', 23

TypeScript 前端工程最佳实践

作者:王春雨 前言 随着前端工程化的快速发展, TypeScript 变得越来越受欢迎,它已经成为前端开发人员必备技能。 TypeScript 最初是由微软开发并开源的一种编程语言,自2012年10月发布首个公开版本以来,它已得到了人们的广泛认可。TypeScript 发展至今,已经成为很多大型项目

typescript的必要性及使用

作为一个前端语言,Javascript从最初只是用来写页面,到如今的移动终端、后端服务、神经网络等等,它变得几乎无处不在。如此广阔的应用领域,对语言的安全性、健壮性以及可维护性都有了更高的要求。尽管ECMAScript标准在近几年有了长足的进步,但是在类型检查方面依然毫无建树。在这种情况下TypeScript应运而生。