自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

理解 TypeScript 中的 “using” 關(guān)鍵詞

開發(fā) 前端
今天解釋 using 關(guān)鍵詞在 TypeScript 中的工作原理,以及一個適用于 using 關(guān)鍵詞的常見使用場景。

using 關(guān)鍵詞用于代替 const 和let,用于定義一個可釋放的對象,即一個在使用后可以自我清理的對象。

然而,這個關(guān)鍵詞源自 C#,那么 TypeScript 只是復(fù)制 C# 嗎?

并不是,TypeScript 只是從 C# 中挑選出最優(yōu)秀的特性,以提升整體開發(fā)者體驗。

今天解釋 using 關(guān)鍵詞在 TypeScript 中的工作原理,以及一個適用于 using 關(guān)鍵詞的常見使用場景。

工作原理

using 關(guān)鍵詞可以像 const 和 let 一樣使用。

// 注意:必須賦值某個值或返回一個值的函數(shù)。
using x = getX();

雖然這種賦值是可能的,但 using 關(guān)鍵詞應(yīng)該僅用于:

  • 使用 Symbol.dispose 關(guān)鍵詞的對象。
  • 返回使用 Symbol.dispose 關(guān)鍵詞的對象的函數(shù)。
  • 否則請使用 const 或 let。

Symbol.dispose 是 TypeScript 中的一個特殊函數(shù),用于將一個對象標(biāo)記為“資源”,即一個可釋放的對象。

以下是一個 TypeScript 中的“資源”示例:

// 使用 Symbol.dispose 標(biāo)記為可釋放的對象
const disposableObject = {
  [Symbol.dispose]: () => {
    console.log("Dispose of me!");
  },
};

// 將對象用作資源
using resource = disposableObject;

我們可以通過 await using 擴(kuò)展這一概念,這允許我們通過Symbol.asyncDispose函數(shù)異步釋放資源:

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

{
  await using resource = getResource();
}

常見使用場景 —— 數(shù)據(jù)庫連接

數(shù)據(jù)庫連接可能是 using 的最常見使用場景。

原因很簡單,你不需要在代碼中手動關(guān)閉數(shù)據(jù)庫連接,讓 Symbol.asyncDispose 函數(shù)為你處理這個問題。

以下是 TotalTypeScript 中的一些代碼片段,完美展示了這一點。

不使用 using:?

const connection = await getDb();

try {
  // 使用連接進(jìn)行操作
} 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 進(jìn)行操作

} // 自動關(guān)閉!

想象一下,現(xiàn)在你可以擁有的這種安心感。

數(shù)據(jù)庫連接的關(guān)閉現(xiàn)在通過 Symbol.asyncDispose 和 using 關(guān)鍵詞自動且負(fù)責(zé)任地處理。

結(jié)論

using 關(guān)鍵詞用于定義“資源”,這些資源是包含 Symbol.dispose 函數(shù)的可釋放對象。

using 關(guān)鍵詞的加入將消除大量意外的 bug,并將開發(fā)者體驗提升十倍。

責(zé)任編輯:姜華 來源: 大遷世界
相關(guān)推薦

2011-06-14 10:01:03

長尾關(guān)鍵詞

2023-06-19 09:16:41

CSSstep函數(shù)

2011-06-20 14:32:59

關(guān)鍵詞

2011-06-07 18:45:41

關(guān)鍵詞

2011-06-14 19:11:38

關(guān)鍵詞

2022-07-20 23:38:10

SDN網(wǎng)絡(luò)工程師網(wǎng)絡(luò)可編程性

2013-08-26 15:43:40

AppStore關(guān)鍵詞開發(fā)者應(yīng)用選取關(guān)鍵詞

2011-06-19 12:20:47

長尾關(guān)鍵詞

2011-05-25 17:58:00

2011-05-25 17:38:56

關(guān)鍵詞

2019-12-22 13:48:26

退休科技行業(yè)大佬

2011-06-10 14:13:24

關(guān)鍵詞

2011-06-20 15:24:43

關(guān)鍵詞

2011-07-12 18:26:42

關(guān)鍵詞

2011-06-10 13:34:17

關(guān)鍵詞

2011-07-06 18:18:01

關(guān)鍵詞密度

2012-03-20 22:19:16

Linux

2009-11-03 09:02:59

Windows 7蘋果競爭

2011-07-22 15:48:46

SEO

2014-09-12 14:03:45

操作系統(tǒng)
點贊
收藏

51CTO技術(shù)棧公眾號