TypeScript5.2引入新关键字using介绍

 更新时间:2023年06月28日 09:37:35   作者:chuck  
这篇文章主要介绍了TypeScript5.2引入新关键字using使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

TypeScript新关键字

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!

图片示例

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

总结

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

更多关于TypeScript新关键字的资料请关注脚本之家其它相关文章!

相关文章

  • JS深入浅出Function与构造函数

    JS深入浅出Function与构造函数

    这篇文章主要介绍了JS深入浅出Function与构造函数,Function是一个构造函数,可以通过该构造函数去创建一个函数,创建的函数是一个Function对象,具体内容请参考下面文章的详细内容,需要的朋友可以参考一下
    2021-12-12
  • JS实现简单的操作杆旋转示例详解

    JS实现简单的操作杆旋转示例详解

    这篇文章主要为大家介绍了JS实现简单的操作杆旋转示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • 详解使用koa2完成Excel导入导出

    详解使用koa2完成Excel导入导出

    这篇文章主要为大家介绍了详解使用koa2完成Excel导入导出示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • 输入框跟随文字内容适配宽实现示例

    输入框跟随文字内容适配宽实现示例

    这篇文章主要为大家介绍了输入框跟随文字内容适配宽实现示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • 微信小程序 WebSocket详解及应用

    微信小程序 WebSocket详解及应用

    这篇文章主要介绍了微信小程序 WebSocket详解及应用的相关资料,需要的朋友可以参考下
    2017-01-01
  • 微信小程序实现拖拽 image 触摸事件监听的实例

    微信小程序实现拖拽 image 触摸事件监听的实例

    这篇文章主要介绍了微信小程序实现拖拽 image 触摸事件监听的实例的相关资料,这里提供image触摸并监听的简单实例,需要的朋友可以参考下
    2017-08-08
  • 使用preload预加载页面资源时注意事项

    使用preload预加载页面资源时注意事项

    本文主要介绍 preload 的使用,以及与 prefetch 的区别。然后会聊聊浏览器的加载优先级,大家一定要认真看完
    2020-02-02
  • mitt tiny-emitter发布订阅应用场景源码解析

    mitt tiny-emitter发布订阅应用场景源码解析

    这篇文章主要为大家介绍了mitt tiny-emitter发布订阅应用场景源码解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • 二维码条形码生成的JavaScript脚本库

    二维码条形码生成的JavaScript脚本库

    这篇文章主要为大家介绍了二维码条形码生成的JavaScript脚本库实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • 详解微信小程序如何实现类似ChatGPT的流式传输

    详解微信小程序如何实现类似ChatGPT的流式传输

    这篇文章主要为大家介绍了微信小程序如何实现类似ChatGPT的流式传输示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03

最新评论