首页 > 其他分享 >TypeScript又出新关键字了?

TypeScript又出新关键字了?

时间:2023-06-27 22:12:52浏览次数:51  
标签:TypeScript const Symbol await dispose 关键字 connection 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,const,Symbol,await,dispose,关键字,connection,using,出新
From: https://www.cnblogs.com/chuckQu/p/17510044.html

相关文章

  • 单继承、多继承下的属性查找、super关键字、多态与多态性、组合
    单继承下的属性查找单继承:一个类只能继承一个类。classC():passclassB(C):passclassA(B):#单继承pass单继承下的属性查找顺序:先从对象本身的名称空间中查找------>产生这个对象的类中去查找 ------>继承的父类中去查找#查找属性classFoo():......
  • Oracle - MERGE关键字用法
    效果:查询两个结果集,根据其中一个,更新另一个。在ETL项目中,掌握这个语句,就能完成大部分的数据处理了。MERGEINTO(--目标结果集,需要更新的结果集SELECT*FROMA_EVT_NOTICE_SMYWHEREDATA_DT='20230101')TARUSING(--源结果集,更新依据的结果集SELE......
  • 【TypeScript】Element 组件导入在 TypeScript 5 报错:模块 ““element-plus““ 没有
    报错现象解决方法typescript5.0版本升级,使用了compilerOptions.moduleResolution:"bundler"的模块编译选项。moduleResolution:模块解析策略,是指编译器在查找导入模块内容时所遵循的流程因此目前要解决报错,我们只需要修改tsconfig.json下的为node就行。/*Bundle......
  • TypeScript中的类
    1.类的基本语法在TypeScript中,使用class关键字来定义类。以下是一个简单的类的示例:classPerson{privatename:string;age:number;constructor(name:string,age:number){this.name=name;this.age=age;}greet(){console.log(`H......
  • volatile 关键字
    原文链接:https://liamw.cn/albums/csharp-dotnet/10-understand-the-volatile-keyword要理解C#中的 volatile 关键字,就要先知道编译器背后的一个基本优化原理。比如对于下面这段代码: publicclassExample{publicintx;publicvoidDoWork(){x......
  • 刷新20项代码任务SOTA,Salesforce提出新型基础LLM系列编码器-解码器Code T5+
    前言 大型语言模型(LLMs)最近在代码层面的一系列下游任务中表现十分出彩。通过对大量基于代码的数据(如GitHub公共数据)进行预训练,LLM可以学习丰富的上下文表征,这些表征可以迁移到各种与代码相关的下游任务。但是,许多现有的模型只能在一部分任务中表现良好,这可能是架构和......
  • C# and TypeScript – Enum Flags
    前言以前就有提过EnumFlags,但平日不常用.最近翻Angular源码,发现它很多地方用到,而且没有封装语义代码.一堆符号真的看不惯啊...于是又去复习了一遍,熟悉熟悉.顺便写一篇做记入呗.这篇C#和TypeScript会一起讲. 参考 深入理解TypeScript–枚举Enum,Fl......
  • 提高开发效率的 TypeScript 技巧
    TypeScript是一种由Microsoft开发的强类型的JavaScript超集语言,它为JavaScript添加了类型检查和更强大的开发工具支持。在使用TypeScript进行项目开发时,掌握一些技巧可以大大提高开发效率和代码质量。本文将介绍一些实用的TypeScript技巧,帮助开发者更好地利用TypeScri......
  • C语言里面那些你必须知道的常用关键字(详细讲解)
    前言  哈喽,各位铁汁们好啊!✨今天来给大家带来的是C语言中我们常用的关键字静态static的详细讲解和typedef、#define定义常量和宏。  既然是详解想必大家必定是想学一些平常学不到的东西吧!这里博主给大家详细讲解static修饰的变量在内存重视如何存储的,顺带给大家讲一下C/C++......
  • typescript之ECMAScript5、ES6
    1、基础常识1.1简介ECMAScript(/ekma/,简称ES)是javascript的标准化规范,其实javascript是ECMAScript的扩展语言。ES定义了一些标准的语法,JS对其进行了DOM、BOM扩展。1.2ES迭代史ES6(又叫ES2015)是ECMA协会在2015年6月发行的一个版本,因为是ECMAScript的第6个版本,所以也称为ES......