It was surprisingly difficult to find this documented exactly anywhere on the internet, so I thought I'd post this somewhere so the next person googling for it has a chance of finding it. The lsp docs just say to "create a dir-local for each of the projects" but provides no guidance on how to do that.
Place a file named .dir-locals.el
in your deno project root, containing exactly the following elisp:
((typescript-mode . ((lsp-disabled-clients . (ts-ls)))))
This disables the ts-ls backend, which selects lsp-deno as the next viable lsp client/server.
This is helpful. Thanks. It's amazing what knowledge is just assumed.