diff --git a/types/node/index.d.ts b/types/node/index.d.ts
index e0a6c92ef61fdc3..1e6774134d505f0 100644
--- a/types/node/index.d.ts
+++ b/types/node/index.d.ts
@@ -120,6 +120,7 @@
///
///
///
+///
///
///
///
diff --git a/types/node/test/url.ts b/types/node/test/url.ts
index c31901445ac1615..54a160fe34f0df9 100644
--- a/types/node/test/url.ts
+++ b/types/node/test/url.ts
@@ -167,3 +167,9 @@ import * as url from 'node:url';
{
const dataUrl: string = url.URL.createObjectURL(new Blob(['']));
}
+{
+ const dataUrl1: URL = new url.URL('file://test');
+ const dataUrl2: url.URL = new URL('file://test');
+ const urlSearchParams1: URLSearchParams = new url.URLSearchParams();
+ const urlSearchParams2: url.URLSearchParams = new URLSearchParams();
+}
diff --git a/types/node/url.d.ts b/types/node/url.d.ts
index 3c41ed74a8f43c4..145174ecb1fa6da 100644
--- a/types/node/url.d.ts
+++ b/types/node/url.d.ts
@@ -778,7 +778,7 @@ declare module 'url' {
* @param fn Invoked for each name-value pair in the query
* @param thisArg To be used as `this` value for when `fn` is called
*/
- forEach(callback: (this: TThis, value: string, name: string, searchParams: this) => void, thisArg?: TThis): void;
+ forEach(callback: (this: TThis, value: string, name: string, searchParams: URLSearchParams) => void, thisArg?: TThis): void;
/**
* Returns the value of the first name-value pair whose name is `name`. If there
* are no such pairs, `null` is returned.
diff --git a/types/node/url.globals.d.ts b/types/node/url.globals.d.ts
new file mode 100644
index 000000000000000..b871fa8c07db7d2
--- /dev/null
+++ b/types/node/url.globals.d.ts
@@ -0,0 +1,11 @@
+import { URL as _URL, URLSearchParams as _URLSearchParams } from 'url';
+
+declare global {
+ interface Global {
+ URL: typeof _URL;
+ URLSearchParams: typeof _URLSearchParams;
+ }
+
+ interface URLSearchParams extends _URLSearchParams {}
+ interface URL extends _URL {}
+}
diff --git a/types/node/v12/index.d.ts b/types/node/v12/index.d.ts
index 68f8cb857384e00..e77f9632b451802 100644
--- a/types/node/v12/index.d.ts
+++ b/types/node/v12/index.d.ts
@@ -82,6 +82,7 @@
///
///
///
+///
///
///
///
diff --git a/types/node/v12/url.d.ts b/types/node/v12/url.d.ts
index 3cd0d028bd688a1..313242604199271 100644
--- a/types/node/v12/url.d.ts
+++ b/types/node/v12/url.d.ts
@@ -103,7 +103,7 @@ declare module 'url' {
append(name: string, value: string): void;
delete(name: string): void;
entries(): IterableIterator<[string, string]>;
- forEach(callback: (value: string, name: string, searchParams: this) => void): void;
+ forEach(callback: (value: string, name: string, searchParams: URLSearchParams) => void): void;
get(name: string): string | null;
getAll(name: string): string[];
has(name: string): boolean;
diff --git a/types/node/v12/url.globals.d.ts b/types/node/v12/url.globals.d.ts
new file mode 100644
index 000000000000000..b871fa8c07db7d2
--- /dev/null
+++ b/types/node/v12/url.globals.d.ts
@@ -0,0 +1,11 @@
+import { URL as _URL, URLSearchParams as _URLSearchParams } from 'url';
+
+declare global {
+ interface Global {
+ URL: typeof _URL;
+ URLSearchParams: typeof _URLSearchParams;
+ }
+
+ interface URLSearchParams extends _URLSearchParams {}
+ interface URL extends _URL {}
+}
diff --git a/types/node/v14/index.d.ts b/types/node/v14/index.d.ts
index 4ef94df6cd6b599..cd735ca08b1bed9 100644
--- a/types/node/v14/index.d.ts
+++ b/types/node/v14/index.d.ts
@@ -88,6 +88,7 @@
///
///
///
+///
///
///
///
diff --git a/types/node/v14/test/url.ts b/types/node/v14/test/url.ts
index 5e863db2c22929f..79d82bb5405fdd0 100644
--- a/types/node/v14/test/url.ts
+++ b/types/node/v14/test/url.ts
@@ -154,3 +154,10 @@ import * as url from 'node:url';
{
const path: url.URL = url.pathToFileURL('file://test');
}
+
+{
+ const dataUrl1: URL = new url.URL('file://test');
+ const dataUrl2: url.URL = new URL('file://test');
+ const urlSearchParams1: URLSearchParams = new url.URLSearchParams();
+ const urlSearchParams2: url.URLSearchParams = new URLSearchParams();
+}
diff --git a/types/node/v14/url.d.ts b/types/node/v14/url.d.ts
index 715dc7df8131f39..682a0e473d257ce 100644
--- a/types/node/v14/url.d.ts
+++ b/types/node/v14/url.d.ts
@@ -102,7 +102,7 @@ declare module 'url' {
append(name: string, value: string): void;
delete(name: string): void;
entries(): IterableIterator<[string, string]>;
- forEach(callback: (value: string, name: string, searchParams: this) => void): void;
+ forEach(callback: (value: string, name: string, searchParams: URLSearchParams) => void, thisArg?: any): void;
get(name: string): string | null;
getAll(name: string): string[];
has(name: string): boolean;
diff --git a/types/node/v14/url.globals.d.ts b/types/node/v14/url.globals.d.ts
new file mode 100644
index 000000000000000..e48c93202f908a1
--- /dev/null
+++ b/types/node/v14/url.globals.d.ts
@@ -0,0 +1,11 @@
+import { URL as _URL, URLSearchParams as _URLSearchParams } from 'node:url';
+
+declare global {
+ interface Global {
+ URL: typeof _URL;
+ URLSearchParams: typeof _URLSearchParams;
+ }
+
+ interface URLSearchParams extends _URLSearchParams {}
+ interface URL extends _URL {}
+}
diff --git a/types/node/v16/index.d.ts b/types/node/v16/index.d.ts
index 37b03d709e50f79..3163479af93f252 100644
--- a/types/node/v16/index.d.ts
+++ b/types/node/v16/index.d.ts
@@ -120,6 +120,7 @@
///
///
///
+///
///
///
///
diff --git a/types/node/v16/test/url.ts b/types/node/v16/test/url.ts
index c31901445ac1615..54a160fe34f0df9 100644
--- a/types/node/v16/test/url.ts
+++ b/types/node/v16/test/url.ts
@@ -167,3 +167,9 @@ import * as url from 'node:url';
{
const dataUrl: string = url.URL.createObjectURL(new Blob(['']));
}
+{
+ const dataUrl1: URL = new url.URL('file://test');
+ const dataUrl2: url.URL = new URL('file://test');
+ const urlSearchParams1: URLSearchParams = new url.URLSearchParams();
+ const urlSearchParams2: url.URLSearchParams = new URLSearchParams();
+}
diff --git a/types/node/v16/url.d.ts b/types/node/v16/url.d.ts
index 602fca03b8c571f..1f5d03e6adc31f6 100644
--- a/types/node/v16/url.d.ts
+++ b/types/node/v16/url.d.ts
@@ -738,7 +738,7 @@ declare module 'url' {
* @param fn Invoked for each name-value pair in the query
* @param thisArg To be used as `this` value for when `fn` is called
*/
- forEach(callback: (this: TThis, value: string, name: string, searchParams: this) => void, thisArg?: TThis): void;
+ forEach(callback: (this: TThis, value: string, name: string, searchParams: URLSearchParams) => void, thisArg?: TThis): void;
/**
* Returns the value of the first name-value pair whose name is `name`. If there
* are no such pairs, `null` is returned.
diff --git a/types/node/v16/url.globals.d.ts b/types/node/v16/url.globals.d.ts
new file mode 100644
index 000000000000000..b871fa8c07db7d2
--- /dev/null
+++ b/types/node/v16/url.globals.d.ts
@@ -0,0 +1,11 @@
+import { URL as _URL, URLSearchParams as _URLSearchParams } from 'url';
+
+declare global {
+ interface Global {
+ URL: typeof _URL;
+ URLSearchParams: typeof _URLSearchParams;
+ }
+
+ interface URLSearchParams extends _URLSearchParams {}
+ interface URL extends _URL {}
+}