乐趣区

关于typescript: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 语句中进行数据库的敞开,这对管理文件句柄、数据库连贯等资源时十分有用。

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

退出移动版