TypeScript 5.2 新关键字: using
TypeScript 可以认为是前端界的 Java, 这不, TypeScript 5.2 即将引入新的关键字: using
, 如果你熟悉 Java, 那么 using
关键字就是 TypeScript 界的 try-with-resource
, 作用就是如果你用 using
修饰任何一个包含有 Symbol.dispose
/ Symbol.asyncDispose
方法的对象, 当跳出这个对象的作用域时, 系统会自动调用这个对象的 Symbol.dispose
/ Symbol.asyncDispose
方法.
一个经典的例子是数据库连接对象, 在 using
之前, 关闭数据库连接对象大概长这样:
// 获取数据库连接
const connection = await getDb();
try {
// 使用数据库连接
} finally {
// 在 finally 代码块里关闭连接
await connection.close();
}
用了 using
之后, 代码长这样:
// 封装了原始数据库连接的新对象, 并且在 Symbol.asyncDispose 异步方法里关闭连接
const getConnection = async () => {
const connection = await getDb();
return {
connection,
[Symbol.asyncDispose]: async () => {
await connection.close();
},
};
};
{
// 对于使用者来说, 只需要使用这个新对象即可
await using { connection } = getConnection();
// 使用数据库连接
} // 出了作用域之后, 会自动调用异步的方法关闭数据库连接
刚好想到之前 Java 21 的新功能: 未命名类和实例 main 方法, 具体来说就是下面这样:
void main() {
System.out.println("Hello, World!");
}
有了这个功能, 上面的 java 代码就是合法的 Java 入口类代码了.