A python-style with statement for deno.

Comes with some Using types, e.g. Open, ChDir, TempDir, and Timeout.


import * as Deno from "deno";
import { using, Open } from "./mod.ts";

const enc = new TextEncoder();
const dec = new TextDecoder("utf-8");

async function main() {
  await using(new Open('file', 'w'), async (f: Deno.File) => {
      const data = enc.encode("Hello world!\n");
    await f.write(data);
  await using(new Open('file', 'r'), async (f: Deno.File) => {
      const data = new Uint8Array(20);
    const text = dec.decode(data);


Custom types

You can define your own Using types by creating a class which implements Using:

export class Open implements Using<Deno.File> {
  constructor(filename: string, mode?: Deno.OpenMode) {
    this.filename = filename;
    this.mode = mode;
  public async _aenter() {
    this.file = await, this.mode);
    return this.file;
  public async _aexit(e) {
  private file: Deno.File;
  private filename: string;
  private mode: Deno.OpenMode;

There is also a corresponding sync version UsingSync.