AVA has a really cool feature called shared workers.
But when using TypeScript and AVA with on-the-fly transpilation with something like tsx, loaded worker files are not transpiled--meaning you're limited to just using Javascript.
This library fixes that and allows you to register and load TypeScript workers.
npm install ava-typescript-worker --save-devor
yarn add ava-typescript-worker --devFor the most part, shared workers behave identically with a few differences.
Here's an example of what a worker might look like:
test.ts:
import test from "ava"
import { registerSharedTypeScriptWorker } from "ava-typescript-worker"
import path from "path"
const worker = registerSharedTypeScriptWorker({
  filename: path.resolve("echo.worker.ts"),
})
test("is worker available", async (t) => {
  await worker.available()
  t.pass()
})echo.worker.ts:
import { SharedWorker } from "ava/plugin"
const echo = async (protocol: SharedWorker.Protocol) => {
  for await (const msg of protocol.subscribe()) {
    msg.reply(msg.data)
  }
}
export default echoNotice that:
supportedProtocolscannot be passed as an option toregisterSharedTypeScriptWorker()- Workers don't need to do protocol negotiation with 
await negotiateProtocol(["ava-4"]).ready() 
This is because TypeScript files are loaded through a Javascript "proxy" loader, which handles protocol negotiations out of necessity.