-
Notifications
You must be signed in to change notification settings - Fork 484
Description
As per DefinitelyTyped/DefinitelyTyped#66824 which was merged recently and released in @types/node@20.8.4, Node.js now defines its own Request, Response, etc. types via undici-types.
While this is great in Node environments, it completely messes with the Request and Response (maybe others?) types defined by @cloudflare/workers-types.
Example code that used to work before:
type SomeType = {
foo: string
};
const response = await fetch(...);
const json = await response.json<SomeType>()Now has a type error with: Expected 0 type arguments, but got 1..
Or:
const country = request?.cf?.country;Now has a type error with `Property 'cf' does not exist on type 'Request'.
Or:
new Request(..., request);Now has a type error with:
Argument of type 'Request' is not assignable to parameter of type 'RequestInit'.
Types of property 'referrerPolicy' are incompatible.
Type 'string' is not assignable to type 'ReferrerPolicy | undefined'.
Why load @types/node?
This is a fair question, and you generally don't need to load @types/node at all, and in fact, I don't directly. But, many dependencies that people use, do in fact require @types/node, including the likes of @types/pg, which is loaded by @neondatabase/serverless.
It seems that once this newer version of @types/node is loaded into memory at all, it just overrides the globally defined Request/Response/fetch types from @cloudflare/workers-types.
Full reproduction
See the following github repo: https://github.com/Cherry/workers-node-types-issue-repro.
This showcases an example package that loads @types/node, and if you comment in/out the import you'll see the type errors now show up.
Workaround
My current workaround for this is to pin @types/node via npm overrides, with this in my package.json:
{
"overrides": {
"@types/node": "20.8.3"
}
}It's a very naive and short-term workaround, but works for now.
Metadata
Metadata
Assignees
Labels
Type
Projects
Status