理解 TypeScript 中的 “using” 关键词

开发 前端
今天解释 using 关键词在 TypeScript 中的工作原理,以及一个适用于 using 关键词的常见使用场景。

using 关键词用于代替 const 和let,用于定义一个可释放的对象,即一个在使用后可以自我清理的对象。

然而,这个关键词源自 C#,那么 TypeScript 只是复制 C# 吗?

并不是,TypeScript 只是从 C# 中挑选出最优秀的特性,以提升整体开发者体验。

今天解释 using 关键词在 TypeScript 中的工作原理,以及一个适用于 using 关键词的常见使用场景。

工作原理

using 关键词可以像 const 和 let 一样使用。

// 注意:必须赋值某个值或返回一个值的函数。
using x = getX();

虽然这种赋值是可能的,但 using 关键词应该仅用于:

  • 使用 Symbol.dispose 关键词的对象。
  • 返回使用 Symbol.dispose 关键词的对象的函数。
  • 否则请使用 const 或 let。

Symbol.dispose 是 TypeScript 中的一个特殊函数,用于将一个对象标记为“资源”,即一个可释放的对象。

以下是一个 TypeScript 中的“资源”示例:

// 使用 Symbol.dispose 标记为可释放的对象
const disposableObject = {
  [Symbol.dispose]: () => {
    console.log("Dispose of me!");
  },
};

// 将对象用作资源
using resource = disposableObject;

我们可以通过 await using 扩展这一概念,这允许我们通过Symbol.asyncDispose函数异步释放资源:

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

{
  await using resource = getResource();
}

常见使用场景 —— 数据库连接

数据库连接可能是 using 的最常见使用场景。

原因很简单,你不需要在代码中手动关闭数据库连接,让 Symbol.asyncDispose 函数为你处理这个问题。

以下是 TotalTypeScript 中的一些代码片段,完美展示了这一点。

不使用 using:❌

const connection = await getDb();

try {
  // 使用连接进行操作
} finally {
  await connection.close();
}

使用 using:✅

const getConnection = async () => {
  const connection = await getDb();

  return {
    connection,
    [Symbol.asyncDispose]: async () => {
      await connection.close();
    },
  };
};

{
  await using db = await getConnection();

  // 使用 db.connection 进行操作

} // 自动关闭!

想象一下,现在你可以拥有的这种安心感。

数据库连接的关闭现在通过 Symbol.asyncDispose 和 using 关键词自动且负责任地处理。

结论

using 关键词用于定义“资源”,这些资源是包含 Symbol.dispose 函数的可释放对象。

using 关键词的加入将消除大量意外的 bug,并将开发者体验提升十倍。

责任编辑:姜华 来源: 大迁世界
相关推荐

2011-06-14 10:01:03

长尾关键词

2023-06-19 09:16:41

CSSstep函数

2011-06-20 14:32:59

关键词

2011-06-07 18:45:41

关键词

2011-06-14 19:11:38

关键词

2022-07-20 23:38:10

SDN网络工程师网络可编程性

2013-08-26 15:43:40

AppStore关键词开发者应用选取关键词

2011-06-19 12:20:47

长尾关键词

2011-05-25 17:38:56

关键词

2019-12-22 13:48:26

退休科技行业大佬

2011-05-25 17:58:00

2011-07-06 18:18:01

关键词密度

2011-06-10 13:34:17

关键词

2011-06-20 15:24:43

关键词

2011-07-12 18:26:42

关键词

2011-06-10 14:13:24

关键词

2011-07-22 15:48:46

SEO

2014-09-12 14:03:45

操作系统

2009-11-03 09:02:59

Windows 7苹果竞争

2012-03-20 22:19:16

Linux
点赞
收藏

51CTO技术栈公众号