This is an automated email from the ASF dual-hosted git repository.

hainenber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/superset.git


The following commit(s) were added to refs/heads/master by this push:
     new 0454c5e940c chore(frontend): upgrade to TypeScript 7 (#45603)
0454c5e940c is described below

commit 0454c5e940c6eb21edf21758b58ef91cb671e436
Author: Evan Rusackas <[email protected]>
AuthorDate: Fri Oct 23 02:54:51 2026 +0100

    chore(frontend): upgrade to TypeScript 7 (#45603)
---
 UPDATING.md                                        |   7 +
 docker-compose-light.yml                           |   1 -
 docker-compose.yml                                 |   1 -
 .../contributing/development-setup.md              |   3 -
 superset-frontend/.storybook/main.mjs              |   5 +-
 superset-frontend/package-lock.json                | 372 ++++++++++++++++++++-
 superset-frontend/package.json                     |   3 +-
 .../packages/superset-core/package.json            |   2 +-
 .../src/components/Modal/Modal.tsx                 |  17 +-
 .../components/controls/ComparisonRangeLabel.tsx   |  66 ++--
 superset-frontend/webpack.config.js                |  43 +--
 11 files changed, 427 insertions(+), 93 deletions(-)

diff --git a/UPDATING.md b/UPDATING.md
index 5342a2faaa1..093b38a3032 100644
--- a/UPDATING.md
+++ b/UPDATING.md
@@ -41,6 +41,13 @@ assists people when migrating to a new version.
   up. Clients adding more views should split them across requests and retry
   timed-out views.
 
+- `superset-frontend` type-checks with TypeScript 7, whose native compiler no
+  longer ships the JavaScript compiler API. The webpack dev server therefore
+  no longer runs `fork-ts-checker-webpack-plugin`, and the `DISABLE_TS_CHECKER`
+  environment variable is gone; run `npm run type` (or `npm run type -- 
--watch`)
+  for type errors and `npm run plugins:build` to refresh package `.d.ts` 
output.
+  Storybook's prop tables now come from `react-docgen` instead of
+  `react-docgen-typescript`.
 - MCP `get_dashboard_data` reports `total_rows=null` and `truncated=true` when
   row-collapsing post-processing leaves input coverage unverified, not only 
when
   truncation is observed. Output row counts do not prove complete input 
coverage.
diff --git a/docker-compose-light.yml b/docker-compose-light.yml
index 0b62ab2fabd..33e81252a4a 100644
--- a/docker-compose-light.yml
+++ b/docker-compose-light.yml
@@ -165,7 +165,6 @@ services:
       BUILD_SUPERSET_FRONTEND_IN_DOCKER: true
       NPM_RUN_PRUNE: false
       SCARF_ANALYTICS: "${SCARF_ANALYTICS:-}"
-      DISABLE_TS_CHECKER: "${DISABLE_TS_CHECKER:-true}"
       # configuring the dev-server to use the host.docker.internal to connect 
to the backend
       superset: "http://superset-light:8088";
       # Webpack dev server must bind to 0.0.0.0 to be accessible from outside 
the container
diff --git a/docker-compose.yml b/docker-compose.yml
index 72949ac7291..49fef2c757e 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -201,7 +201,6 @@ services:
       BUILD_SUPERSET_FRONTEND_IN_DOCKER: true
       NPM_RUN_PRUNE: false
       SCARF_ANALYTICS: "${SCARF_ANALYTICS:-}"
-      DISABLE_TS_CHECKER: "${DISABLE_TS_CHECKER:-true}"
       # configuring the dev-server to use the host.docker.internal to connect 
to the backend
       superset: "http://superset:8088";
       # Webpack dev server must bind to 0.0.0.0 to be accessible from outside 
the container
diff --git a/docs/developer_docs/contributing/development-setup.md 
b/docs/developer_docs/contributing/development-setup.md
index 223253baec3..e98495f4f57 100644
--- a/docs/developer_docs/contributing/development-setup.md
+++ b/docs/developer_docs/contributing/development-setup.md
@@ -105,9 +105,6 @@ Affecting the Docker build process:
   for more verbose logging
 - **SUPERSET_DEBUG_ENABLED (default=false)**: Enable Werkzeug debugger with 
interactive console.
   Set to `true` for debugging: `SUPERSET_DEBUG_ENABLED=true docker compose up`
-- **DISABLE_TS_CHECKER (default=true)**: whether the `superset-node` webpack 
dev server skips
-  TypeScript type-checking, which speeds up rebuilds and saves several GB of 
memory. Set to
-  `false` to have webpack surface type errors during development.
 
 For more env vars that affect your configuration, see this
 
[superset_config.py](https://github.com/apache/superset/blob/master/docker/pythonpath_dev/superset_config.py)
diff --git a/superset-frontend/.storybook/main.mjs 
b/superset-frontend/.storybook/main.mjs
index f3f7d0adeaf..710bf138db5 100644
--- a/superset-frontend/.storybook/main.mjs
+++ b/superset-frontend/.storybook/main.mjs
@@ -141,7 +141,10 @@ export default {
   }),
 
   typescript: {
-    reactDocgen: getAbsolutePath('react-docgen-typescript'),
+    // react-docgen-typescript needs the TypeScript compiler API, which the
+    // native TypeScript 7 package no longer ships; react-docgen (Storybook's
+    // default, Babel-based) reads the same prop types from source.
+    reactDocgen: 'react-docgen',
   },
 
   framework: {
diff --git a/superset-frontend/package-lock.json 
b/superset-frontend/package-lock.json
index ccd8c3e7003..8817f36fd6f 100644
--- a/superset-frontend/package-lock.json
+++ b/superset-frontend/package-lock.json
@@ -215,7 +215,6 @@
         "cross-env": "^10.1.0",
         "css-loader": "^7.1.5",
         "fetch-mock": "^12.6.0",
-        "fork-ts-checker-webpack-plugin": "^9.1.0",
         "gettext-parser": "^9.1.1",
         "history": "^5.3.0",
         "html-webpack-plugin": "^5.6.8",
@@ -247,7 +246,7 @@
         "swc-loader": "^0.2.7",
         "tscw-config": "^1.1.2",
         "tsx": "^4.23.15",
-        "typescript": "6.0.3",
+        "typescript": "7.0.2",
         "unzipper": "^0.12.5",
         "webpack": "^5.111.1",
         "webpack-bundle-analyzer": "^5.4.0",
@@ -13590,6 +13589,326 @@
       "dev": true,
       "license": "MIT"
     },
+    "node_modules/@typescript/typescript-aix-ppc64": {
+      "version": "7.0.2",
+      "resolved": 
"https://registry.npmjs.org/@typescript/typescript-aix-ppc64/-/typescript-aix-ppc64-7.0.2.tgz";,
+      "integrity": 
"sha512-MTKKkWB7p/0E9xi1d1tHtZ5PiLkGEMIq88pK2CubZjOsLtYTLqhgIgi6zepFa+9GHZ6h05NMCkQxGKiPXMxXtQ==",
+      "cpu": [
+        "ppc64"
+      ],
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "aix"
+      ],
+      "engines": {
+        "node": ">=16.20.0"
+      }
+    },
+    "node_modules/@typescript/typescript-darwin-arm64": {
+      "version": "7.0.2",
+      "resolved": 
"https://registry.npmjs.org/@typescript/typescript-darwin-arm64/-/typescript-darwin-arm64-7.0.2.tgz";,
+      "integrity": 
"sha512-gowzar9MwS/aRWp6f3a4KUqzRjAZjOsmGNCM6LcTgXum+dBfgsBVMN+AgvOCCbguXyick6LJhpBszxMebJ8syA==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": ">=16.20.0"
+      }
+    },
+    "node_modules/@typescript/typescript-darwin-x64": {
+      "version": "7.0.2",
+      "resolved": 
"https://registry.npmjs.org/@typescript/typescript-darwin-x64/-/typescript-darwin-x64-7.0.2.tgz";,
+      "integrity": 
"sha512-SZ9xZInqApNlNGc9s0W1VSsktYSOe9cFqNOIqmN1Gs8SmkjKZYFt017G4VwPxASInODuAdbTW7sXiFUf893RgA==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": ">=16.20.0"
+      }
+    },
+    "node_modules/@typescript/typescript-freebsd-arm64": {
+      "version": "7.0.2",
+      "resolved": 
"https://registry.npmjs.org/@typescript/typescript-freebsd-arm64/-/typescript-freebsd-arm64-7.0.2.tgz";,
+      "integrity": 
"sha512-W5NH4y/J0plIIS5b2xvTEkU7JFxyqdMAOgf+Ilhl0vHQXKO5dZoxd+C/jEtq56c4F3wk71RB4BMRQ2XdI+bwYQ==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "freebsd"
+      ],
+      "engines": {
+        "node": ">=16.20.0"
+      }
+    },
+    "node_modules/@typescript/typescript-freebsd-x64": {
+      "version": "7.0.2",
+      "resolved": 
"https://registry.npmjs.org/@typescript/typescript-freebsd-x64/-/typescript-freebsd-x64-7.0.2.tgz";,
+      "integrity": 
"sha512-UMGDx5sTpzNw3WiPebH7l90IWfJggEd+egHt/q6p7/Cm3zqoV7VxkGXt+3DxPIw8CcmvAB0j3sVVfbhX+M4Tpw==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "freebsd"
+      ],
+      "engines": {
+        "node": ">=16.20.0"
+      }
+    },
+    "node_modules/@typescript/typescript-linux-arm": {
+      "version": "7.0.2",
+      "resolved": 
"https://registry.npmjs.org/@typescript/typescript-linux-arm/-/typescript-linux-arm-7.0.2.tgz";,
+      "integrity": 
"sha512-gffT3xPz9sR7j/YJExkyPntrI0P2EP9XbOyWzth2/Gs0RstK+90RBcO0ncXoXy/beYll1SXw846Nf2zdnEz0QQ==",
+      "cpu": [
+        "arm"
+      ],
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=16.20.0"
+      }
+    },
+    "node_modules/@typescript/typescript-linux-arm64": {
+      "version": "7.0.2",
+      "resolved": 
"https://registry.npmjs.org/@typescript/typescript-linux-arm64/-/typescript-linux-arm64-7.0.2.tgz";,
+      "integrity": 
"sha512-Qh4eU4/y3yDjnfjjyPYihMj5/ODIlmt+Bzu17OI+fiSRDW57QmU5SiN63exPRNJPKUzcc1INa1NXdrJ+MqHjUQ==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=16.20.0"
+      }
+    },
+    "node_modules/@typescript/typescript-linux-loong64": {
+      "version": "7.0.2",
+      "resolved": 
"https://registry.npmjs.org/@typescript/typescript-linux-loong64/-/typescript-linux-loong64-7.0.2.tgz";,
+      "integrity": 
"sha512-uEHck9i8hoAzXPiYRib1O7miOnz23SxIeVl6F4LXox+qov1K35jHcEW6VHKvZI+pyvl7fZEP4MCU5LYvIq1GuQ==",
+      "cpu": [
+        "loong64"
+      ],
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=16.20.0"
+      }
+    },
+    "node_modules/@typescript/typescript-linux-mips64el": {
+      "version": "7.0.2",
+      "resolved": 
"https://registry.npmjs.org/@typescript/typescript-linux-mips64el/-/typescript-linux-mips64el-7.0.2.tgz";,
+      "integrity": 
"sha512-R4KvAMnE43W5Qeqb0Ly56O3mWMWIAgsMyz36DCaycd5nbg/9kzm0liw3JocfRqyJY0KPmzFjbswozXyW0DnIYA==",
+      "cpu": [
+        "mips64el"
+      ],
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=16.20.0"
+      }
+    },
+    "node_modules/@typescript/typescript-linux-ppc64": {
+      "version": "7.0.2",
+      "resolved": 
"https://registry.npmjs.org/@typescript/typescript-linux-ppc64/-/typescript-linux-ppc64-7.0.2.tgz";,
+      "integrity": 
"sha512-DORx5b3sd/4S7eayxm4FQv+A7CrkUIGRaHiwI8oiHTAI1fAPWhF4J0vAlkC8biAlHSVVwxMQ3tjZ2/DVbnQiiA==",
+      "cpu": [
+        "ppc64"
+      ],
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=16.20.0"
+      }
+    },
+    "node_modules/@typescript/typescript-linux-riscv64": {
+      "version": "7.0.2",
+      "resolved": 
"https://registry.npmjs.org/@typescript/typescript-linux-riscv64/-/typescript-linux-riscv64-7.0.2.tgz";,
+      "integrity": 
"sha512-wf0jqEDOjrPRnKwYRyyJDRo11KMbvMFrU+q4zqKyChODBzvlkbhNQfKvLxQCcwTpdDaXSHZTVuh0JoCrKCUMHQ==",
+      "cpu": [
+        "riscv64"
+      ],
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=16.20.0"
+      }
+    },
+    "node_modules/@typescript/typescript-linux-s390x": {
+      "version": "7.0.2",
+      "resolved": 
"https://registry.npmjs.org/@typescript/typescript-linux-s390x/-/typescript-linux-s390x-7.0.2.tgz";,
+      "integrity": 
"sha512-IkwJc3L7yhytWd/ewjyxNDfOmswCm9GWMJT/ue/dU4aZNbwZeYAetq42VyLmsmSjvoX7z74X6ZaYCtzAr0EuGw==",
+      "cpu": [
+        "s390x"
+      ],
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=16.20.0"
+      }
+    },
+    "node_modules/@typescript/typescript-linux-x64": {
+      "version": "7.0.2",
+      "resolved": 
"https://registry.npmjs.org/@typescript/typescript-linux-x64/-/typescript-linux-x64-7.0.2.tgz";,
+      "integrity": 
"sha512-EYdf2cNg7rgCWJnxCdJ+F3V39O8ihb37eHAu1LK8oAFizgTQbPOK7zHHXbPt8rX24COqODXeI3sIf0fCXG7H/A==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=16.20.0"
+      }
+    },
+    "node_modules/@typescript/typescript-netbsd-arm64": {
+      "version": "7.0.2",
+      "resolved": 
"https://registry.npmjs.org/@typescript/typescript-netbsd-arm64/-/typescript-netbsd-arm64-7.0.2.tgz";,
+      "integrity": 
"sha512-+polYF4MF04aPpO5FTkHran9yUQDSXqy5GiSDKpsll5jy3l3+g9QLhpf39T+ePtefhXLOGrLl0QIjkQP6VnelA==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "netbsd"
+      ],
+      "engines": {
+        "node": ">=16.20.0"
+      }
+    },
+    "node_modules/@typescript/typescript-netbsd-x64": {
+      "version": "7.0.2",
+      "resolved": 
"https://registry.npmjs.org/@typescript/typescript-netbsd-x64/-/typescript-netbsd-x64-7.0.2.tgz";,
+      "integrity": 
"sha512-8YIT0EHM/3dq10ZOVF/A7pc/YSMtbcecct4rWtexrnSCHOPcpC2KTLXfTCR6vDpnSiY12heNb1GiN/wu+T/FyA==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "netbsd"
+      ],
+      "engines": {
+        "node": ">=16.20.0"
+      }
+    },
+    "node_modules/@typescript/typescript-openbsd-arm64": {
+      "version": "7.0.2",
+      "resolved": 
"https://registry.npmjs.org/@typescript/typescript-openbsd-arm64/-/typescript-openbsd-arm64-7.0.2.tgz";,
+      "integrity": 
"sha512-APT8+ClYnuYm1u9+kgGXoMj2VzWzcymwh2gNSQVySHfkRDGOTVkoWLjCmOQSaO+PoqQ57B0flRp9SA+7GnnkzQ==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "openbsd"
+      ],
+      "engines": {
+        "node": ">=16.20.0"
+      }
+    },
+    "node_modules/@typescript/typescript-openbsd-x64": {
+      "version": "7.0.2",
+      "resolved": 
"https://registry.npmjs.org/@typescript/typescript-openbsd-x64/-/typescript-openbsd-x64-7.0.2.tgz";,
+      "integrity": 
"sha512-yX7s+Q0Dln0Dt9tEzZsAjXXR/+ytBM7AlglaqyeMPxQszJ1JhlJdZ6jLA+IzldHtflX81em7lDao1xXu+aRRkg==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "openbsd"
+      ],
+      "engines": {
+        "node": ">=16.20.0"
+      }
+    },
+    "node_modules/@typescript/typescript-sunos-x64": {
+      "version": "7.0.2",
+      "resolved": 
"https://registry.npmjs.org/@typescript/typescript-sunos-x64/-/typescript-sunos-x64-7.0.2.tgz";,
+      "integrity": 
"sha512-dLJDGaLZ1D4HPQn62u1n8mBDkJREwMsAkCdkwd4Ieqw+x3TUyTsqY0YiBCtE6H6OzzgGk3iuZ3vFWRS+E8/d1g==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "sunos"
+      ],
+      "engines": {
+        "node": ">=16.20.0"
+      }
+    },
+    "node_modules/@typescript/typescript-win32-arm64": {
+      "version": "7.0.2",
+      "resolved": 
"https://registry.npmjs.org/@typescript/typescript-win32-arm64/-/typescript-win32-arm64-7.0.2.tgz";,
+      "integrity": 
"sha512-Gyl1Vy6OsWesLzmq+EP0Fb7b4Nid5232AvcA2SFcdYreldpNtYFFofPjnt62y9hQy7VTaZp65ICJjuAQRaVcIQ==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">=16.20.0"
+      }
+    },
+    "node_modules/@typescript/typescript-win32-x64": {
+      "version": "7.0.2",
+      "resolved": 
"https://registry.npmjs.org/@typescript/typescript-win32-x64/-/typescript-win32-x64-7.0.2.tgz";,
+      "integrity": 
"sha512-0BQ3HkAHHlKLSp1qRvf3SUhGpGsDuhB/jgFw75guyqbxJqEaS0Cw/VFO8i2nHglJUzQCRtMMR/IBAKE3ETMC4g==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">=16.20.0"
+      }
+    },
     "node_modules/@ungap/structured-clone": {
       "version": "1.3.0",
       "resolved": 
"https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz";,
@@ -32180,6 +32499,20 @@
         "postcss": "^8.5.1"
       }
     },
+    "node_modules/postcss-styled-syntax/node_modules/typescript": {
+      "version": "6.0.3",
+      "resolved": 
"https://registry.npmjs.org/typescript/-/typescript-6.0.3.tgz";,
+      "integrity": 
"sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "bin": {
+        "tsc": "bin/tsc",
+        "tsserver": "bin/tsserver"
+      },
+      "engines": {
+        "node": ">=14.17"
+      }
+    },
     "node_modules/postcss-value-parser": {
       "version": "4.2.0",
       "resolved": 
"https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz";,
@@ -38860,16 +39193,37 @@
       }
     },
     "node_modules/typescript": {
-      "version": "6.0.3",
-      "resolved": 
"https://registry.npmjs.org/typescript/-/typescript-6.0.3.tgz";,
-      "integrity": 
"sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==",
+      "version": "7.0.2",
+      "resolved": 
"https://registry.npmjs.org/typescript/-/typescript-7.0.2.tgz";,
+      "integrity": 
"sha512-8FYau96o3NKOhbjKi/qNvG/W5jhzxkbdm5sj9AbZ/5T5sWqn3hJgLfGx27sRKZWTvyzCP8dLRBTf5tBTSRVUNA==",
       "license": "Apache-2.0",
       "bin": {
-        "tsc": "bin/tsc",
-        "tsserver": "bin/tsserver"
+        "tsc": "bin/tsc"
       },
       "engines": {
-        "node": ">=14.17"
+        "node": ">=16.20.0"
+      },
+      "optionalDependencies": {
+        "@typescript/typescript-aix-ppc64": "7.0.2",
+        "@typescript/typescript-darwin-arm64": "7.0.2",
+        "@typescript/typescript-darwin-x64": "7.0.2",
+        "@typescript/typescript-freebsd-arm64": "7.0.2",
+        "@typescript/typescript-freebsd-x64": "7.0.2",
+        "@typescript/typescript-linux-arm": "7.0.2",
+        "@typescript/typescript-linux-arm64": "7.0.2",
+        "@typescript/typescript-linux-loong64": "7.0.2",
+        "@typescript/typescript-linux-mips64el": "7.0.2",
+        "@typescript/typescript-linux-ppc64": "7.0.2",
+        "@typescript/typescript-linux-riscv64": "7.0.2",
+        "@typescript/typescript-linux-s390x": "7.0.2",
+        "@typescript/typescript-linux-x64": "7.0.2",
+        "@typescript/typescript-netbsd-arm64": "7.0.2",
+        "@typescript/typescript-netbsd-x64": "7.0.2",
+        "@typescript/typescript-openbsd-arm64": "7.0.2",
+        "@typescript/typescript-openbsd-x64": "7.0.2",
+        "@typescript/typescript-sunos-x64": "7.0.2",
+        "@typescript/typescript-win32-arm64": "7.0.2",
+        "@typescript/typescript-win32-x64": "7.0.2"
       }
     },
     "node_modules/typescript-json-schema": {
@@ -41686,7 +42040,7 @@
         "@types/lodash": "^4.17.25",
         "@types/react": "*",
         "@types/tinycolor2": "*",
-        "typescript": "6.0.3"
+        "typescript": "7.0.2"
       },
       "peerDependencies": {
         "@emotion/cache": "^11.4.0",
diff --git a/superset-frontend/package.json b/superset-frontend/package.json
index 12043490814..22d8c235bc5 100644
--- a/superset-frontend/package.json
+++ b/superset-frontend/package.json
@@ -291,7 +291,6 @@
     "cross-env": "^10.1.0",
     "css-loader": "^7.1.5",
     "fetch-mock": "^12.6.0",
-    "fork-ts-checker-webpack-plugin": "^9.1.0",
     "gettext-parser": "^9.1.1",
     "history": "^5.3.0",
     "html-webpack-plugin": "^5.6.8",
@@ -323,7 +322,7 @@
     "swc-loader": "^0.2.7",
     "tscw-config": "^1.1.2",
     "tsx": "^4.23.15",
-    "typescript": "6.0.3",
+    "typescript": "7.0.2",
     "unzipper": "^0.12.5",
     "webpack": "^5.111.1",
     "webpack-bundle-analyzer": "^5.4.0",
diff --git a/superset-frontend/packages/superset-core/package.json 
b/superset-frontend/packages/superset-core/package.json
index 4e7415c28f8..0fc942014a2 100644
--- a/superset-frontend/packages/superset-core/package.json
+++ b/superset-frontend/packages/superset-core/package.json
@@ -109,7 +109,7 @@
     "@types/lodash": "^4.17.25",
     "@types/react": "*",
     "@types/tinycolor2": "*",
-    "typescript": "6.0.3"
+    "typescript": "7.0.2"
   },
   "peerDependencies": {
     "@emotion/cache": "^11.4.0",
diff --git 
a/superset-frontend/packages/superset-ui-core/src/components/Modal/Modal.tsx 
b/superset-frontend/packages/superset-ui-core/src/components/Modal/Modal.tsx
index 3e6bfb76379..89f249bbb5a 100644
--- a/superset-frontend/packages/superset-ui-core/src/components/Modal/Modal.tsx
+++ b/superset-frontend/packages/superset-ui-core/src/components/Modal/Modal.tsx
@@ -23,6 +23,7 @@ import {
   useRef,
   useState,
   type ComponentType,
+  FC,
 } from 'react';
 import { isNil } from 'lodash-es';
 import { t } from '@apache-superset/core/translation';
@@ -427,9 +428,13 @@ const CustomModal = ({
 };
 CustomModal.displayName = 'Modal';
 
-export const Modal = Object.assign(CustomModal, {
-  error: AntdModal.error,
-  warning: AntdModal.warning,
-  confirm: AntdModal.confirm,
-  useModal: AntdModal.useModal,
-});
+// The explicit type keeps the non-exported CustomModal out of the package's
+// declaration output, which TypeScript 7 rejects (TS4082).
+export const Modal: FC<ModalProps> &
+  Pick<typeof AntdModal, 'error' | 'warning' | 'confirm' | 'useModal'> =
+  Object.assign(CustomModal, {
+    error: AntdModal.error,
+    warning: AntdModal.warning,
+    confirm: AntdModal.confirm,
+    useModal: AntdModal.useModal,
+  });
diff --git 
a/superset-frontend/src/explore/components/controls/ComparisonRangeLabel.tsx 
b/superset-frontend/src/explore/components/controls/ComparisonRangeLabel.tsx
index d588061ebef..180581ccb1e 100644
--- a/superset-frontend/src/explore/components/controls/ComparisonRangeLabel.tsx
+++ b/superset-frontend/src/explore/components/controls/ComparisonRangeLabel.tsx
@@ -135,39 +135,43 @@ export const ComparisonRangeLabel = ({
             startDate) ||
           ensureIsArray(customOrInheritShifts).includes('inherit')
         ) {
-          return fetchTimeRange(filter.comparator, filter.subject).then(res => 
{
-            const dates = res?.value?.match(DEFAULT_DATE_PATTERN);
-            const [parsedStartDate, parsedEndDate] = dates ?? [];
-            if (parsedStartDate) {
-              const parsedDateDayjs = extendedDayjs(
-                parseDttmToDate(parsedStartDate),
-              );
-              const startDateDayjs = extendedDayjs(parseDttmToDate(startDate));
-              if (
-                startDateDayjs.isBefore(parsedDateDayjs) ||
-                startDateDayjs.isSame(parsedDateDayjs) ||
-                !startDate
-              ) {
-                const postProcessedShifts = getTimeOffset({
-                  timeRangeFilter: {
-                    ...filter,
-                    comparator: `${parsedStartDate} : ${parsedEndDate}`,
-                  },
-                  shifts: customOrInheritShifts,
-                  startDate: useStartDate,
-                  includeFutureOffsets: false, // So we don't trigger requests 
for future dates
-                });
-                return fetchTimeRange(
-                  filter.comparator,
-                  filter.subject,
-                  ensureIsArray(
-                    postProcessedShifts.concat(nonCustomNorInheritShifts),
-                  ),
+          return fetchTimeRange(filter.comparator, filter.subject).then(
+            async res => {
+              const dates = res?.value?.match(DEFAULT_DATE_PATTERN);
+              const [parsedStartDate, parsedEndDate] = dates ?? [];
+              if (parsedStartDate) {
+                const parsedDateDayjs = extendedDayjs(
+                  parseDttmToDate(parsedStartDate),
                 );
+                const startDateDayjs = extendedDayjs(
+                  parseDttmToDate(startDate),
+                );
+                if (
+                  startDateDayjs.isBefore(parsedDateDayjs) ||
+                  startDateDayjs.isSame(parsedDateDayjs) ||
+                  !startDate
+                ) {
+                  const postProcessedShifts = getTimeOffset({
+                    timeRangeFilter: {
+                      ...filter,
+                      comparator: `${parsedStartDate} : ${parsedEndDate}`,
+                    },
+                    shifts: customOrInheritShifts,
+                    startDate: useStartDate,
+                    includeFutureOffsets: false, // So we don't trigger 
requests for future dates
+                  });
+                  return fetchTimeRange(
+                    filter.comparator,
+                    filter.subject,
+                    ensureIsArray(
+                      postProcessedShifts.concat(nonCustomNorInheritShifts),
+                    ),
+                  );
+                }
               }
-            }
-            return Promise.resolve({ value: '' });
-          });
+              return Promise.resolve({ value: '' });
+            },
+          );
         }
         return Promise.resolve({ value: '' });
       });
diff --git a/superset-frontend/webpack.config.js 
b/superset-frontend/webpack.config.js
index a7b938a5a6d..d6e9681c683 100644
--- a/superset-frontend/webpack.config.js
+++ b/superset-frontend/webpack.config.js
@@ -32,7 +32,6 @@ import {
   WebpackManifestPlugin,
   getCompilerHooks,
 } from 'webpack-manifest-plugin';
-import ForkTsCheckerWebpackPlugin from 'fork-ts-checker-webpack-plugin';
 import ReactRefreshWebpackPlugin from '@pmmmwh/react-refresh-webpack-plugin';
 import yargs from 'yargs';
 import { hideBin } from 'yargs/helpers';
@@ -80,9 +79,6 @@ const devserverHost =
 const isDevMode = mode !== 'production';
 const isDevServer = process.argv[1]?.includes('webpack-dev-server') ?? false;
 
-// TypeScript checker memory limit (in MB)
-const TYPESCRIPT_MEMORY_LIMIT = 8192;
-
 const defaultEntryFilename = isDevMode
   ? '[name].[contenthash:8].entry.js'
   : nameChunks
@@ -247,40 +243,11 @@ if (!isDevMode) {
   );
 }
 
-// TypeScript type checking and .d.ts generation
-// SWC handles transpilation; this plugin handles type checking separately.
-// build: true enables project references so .d.ts files are auto-generated
-// across the monorepo when editing plugins/packages.
-// mode: 'write-references' writes .d.ts output (no manual `npm run 
plugins:build` needed).
-// Set DISABLE_TS_CHECKER=true to skip this plugin entirely (~2-3 GB savings).
-// Type errors are still caught by pre-commit and CI.
-const disableTsChecker = ['true', '1'].includes(
-  (process.env.DISABLE_TS_CHECKER || '').toLowerCase(),
-);
-if (isDevMode && !disableTsChecker) {
-  plugins.push(
-    new ForkTsCheckerWebpackPlugin({
-      async: true,
-      typescript: {
-        build: true,
-        mode: 'write-references',
-        memoryLimit: TYPESCRIPT_MEMORY_LIMIT,
-        configOverwrite: {
-          compilerOptions: {
-            skipLibCheck: true,
-            incremental: true,
-          },
-          exclude: [
-            'src/**/*.js',
-            'src/**/*.jsx',
-            '**/*.test.*',
-            '**/*.stories.*',
-          ],
-        },
-      },
-    }),
-  );
-}
+// Type checking does not run inside webpack: SWC only transpiles, and the
+// native TypeScript compiler is fast enough to run on its own. Use
+// `npm run type` (or `npm run type -- --watch`) for type errors, and
+// `npm run plugins:build` (or `npx tsc --build --watch`) to refresh the
+// packages' .d.ts output while editing plugins/packages.
 
 // In dev mode, include theme.ts in preamble to avoid separate chunk HMR issues
 const PREAMBLE = isDevMode

Reply via email to