#Unable to target browser and deno with unstable features in typescript `compilerOptions.lib`

14 messages · Page 1 of 1 (latest)

coral temple
#

Hi. I followed the guide from docs to include libs for dom api and deno unstable features in the same environment. But it doesn't work for me. I added this to deno.json:

{
    "unstable": ["webgpu"],
    "compilerOptions": {
        "lib": [
            "dom",
            "dom.iterable",
            "dom.asynciterable",
            "deno.ns",
            "deno.unstable"
        ],
    },
}

In my case I wanted to use webgpu api and render it on dom canvas

const canvas = document.createElement("canvas");
document.body.appendChild(canvas);
// no errors for dom api

const adapter = await navigator.gpu.requestAdapter();
                                ^^^
Property 'gpu' does not exist on type 'Navigator'.  

If I don't specify lib property in compilerOptions, I can access the navigator.gpu, but then I can't use dom api. Based on the docs the configuration above should allow for both api, but it doesn't work for me.

Deno

In-depth documentation, guides, and reference materials for building secure, high-performance JavaScript and TypeScript applications with Deno

vast coral
coral temple
vast coral
#

I'm pretty sure that just provides access to the unstable APIs in the Deno namespace

#

Like Deno.cron and kv

#

I think you'll just have to cast it to type any and do it without types

#

(navigator as any).gpu

coral temple
#

hmm, okey. I thought that, as it is an unstable feature, its types are also included in this "deno.unstable" library. If I don't specify anything in the "lib" option, I have all definitions for webgpu types. But the time I add anything to the "lib" options, I lose them.

vast coral
#

When the lib option is empty deno.window is used which does have the .gpu since Deno supports it

coral temple
#

ahh, okey. Thanks. Then it seems like the only way would be to manually include types from npm "@webgpu/types"

#

because "deno.window" would conflict with "dom" apis

vast coral
#

I think just casting it to type any would be easiest but you do you

#

I have to do a similar thing with ArrayBuffer.transfer until Deno updates the TypeScript version to 5.7

coral temple