diff --git a/browser/jsconfig.json b/browser/jsconfig.json
new file mode 100644
index 000000000000..ceb95a74b8a4
--- /dev/null
+++ b/browser/jsconfig.json
@@ -0,0 +1,4 @@
+{
+ "extends": "../tools/@types/tsconfig.json",
+ "include": ["**/*.sys.mjs"]
+}
diff --git a/toolkit/components/extensions/types/globals.ts b/toolkit/components/extensions/types/globals.ts
index eae23ad57f61..ae2b5740809e 100644
--- a/toolkit/components/extensions/types/globals.ts
+++ b/toolkit/components/extensions/types/globals.ts
@@ -1,20 +1,3 @@
-/**
- * Gecko globals.
- */
-declare global {
- const Cc: nsXPCComponents_Classes;
- const Ci: nsIXPCComponents_Interfaces;
- const Cr: nsIXPCComponents_Results;
- const Components: nsIXPCComponents;
-
- // Resolve typed generic overloads before the generated ones.
- const Cu: nsXPCComponents_Utils & nsIXPCComponents_Utils;
-
- const Glean: GleanImpl;
- const GleanPings: GleanPingsImpl;
- const Services: JSServices;
- const uneval: (any) => string;
-}
// Exports for all modules redirected here by a catch-all rule in tsconfig.json.
export var
diff --git a/toolkit/jsconfig.json b/toolkit/jsconfig.json
new file mode 100644
index 000000000000..ceb95a74b8a4
--- /dev/null
+++ b/toolkit/jsconfig.json
@@ -0,0 +1,4 @@
+{
+ "extends": "../tools/@types/tsconfig.json",
+ "include": ["**/*.sys.mjs"]
+}
diff --git a/toolkit/moz.build b/toolkit/moz.build
index e60f9c586bf3..fa9afa2e449b 100644
--- a/toolkit/moz.build
+++ b/toolkit/moz.build
@@ -94,6 +94,9 @@ with Files("mozapps/preferences/**"):
with Files("l10n-registry.manifest"):
BUG_COMPONENT = ("Core", "Localization")
+with Files("jsconfig.json"):
+ BUG_COMPONENT = ("Developer Infrastructure", "Lint and Formatting")
+
GeneratedFile(
"content/neterror/aboutNetErrorCodes.js",
script="content/neterror/gen_aboutneterror_codes.py",
diff --git a/tools/@types/index.d.ts b/tools/@types/index.d.ts
index f796d64bf002..e1fc1c11e8c7 100644
--- a/tools/@types/index.d.ts
+++ b/tools/@types/index.d.ts
@@ -7,3 +7,21 @@
///
///
///
+
+/// Order of references matters here, for overriding type signatures.
+///
+
+declare global {
+ const Cc: nsXPCComponents_Classes;
+ const Ci: nsIXPCComponents_Interfaces;
+ const Components: nsIXPCComponents;
+ const Cr: nsIXPCComponents_Results;
+
+ // Resolve typed generic overloads before the generated ones.
+ const Cu: nsXPCComponents_Utils & nsIXPCComponents_Utils;
+
+ const Services: JSServices;
+ const uneval: (any) => string;
+}
+
+export {};
diff --git a/toolkit/components/extensions/types/gecko.ts b/tools/@types/lib.gecko.tweaks.d.ts
similarity index 94%
rename from toolkit/components/extensions/types/gecko.ts
rename to tools/@types/lib.gecko.tweaks.d.ts
index 720919d794d0..01e63a405ee9 100644
--- a/toolkit/components/extensions/types/gecko.ts
+++ b/tools/@types/lib.gecko.tweaks.d.ts
@@ -91,4 +91,7 @@ interface XULBrowserElement extends XULFrameElement, FrameLoader {
remoteType: string;
}
-type nsQIResult = import("gecko/lib.gecko.xpcom").nsQIResult;
+// https://github.com/microsoft/TypeScript-DOM-lib-generator/issues/1736
+interface Localization {
+ formatValuesSync(aKeys: L10nKey[]): (string | null)[];
+}
diff --git a/tools/@types/tsconfig.json b/tools/@types/tsconfig.json
new file mode 100644
index 000000000000..b39e1e0ea9aa
--- /dev/null
+++ b/tools/@types/tsconfig.json
@@ -0,0 +1,7 @@
+{
+ "compilerOptions": {
+ "noEmit": true,
+ "target": "es2022",
+ "types": ["gecko"]
+ }
+}
diff --git a/tools/moz.build b/tools/moz.build
index 041c99880086..eacddf0879b2 100644
--- a/tools/moz.build
+++ b/tools/moz.build
@@ -41,6 +41,9 @@ with Files("tryselect/**"):
with Files("tryselect/selectors/release.py"):
BUG_COMPONENT = ("Release Engineering", "General")
+with Files("ts/**"):
+ BUG_COMPONENT = ("Developer Infrastructure", "Lint and Formatting")
+
with Files("update-packaging/**"):
BUG_COMPONENT = ("Release Engineering", "General")