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

rusackas pushed a commit to branch fix/type-errors-master
in repository https://gitbox.apache.org/repos/asf/superset.git

commit 6838b1a46452f450bfcb4b2b41f048442d12dcda
Author: Evan Rusackas <[email protected]>
AuthorDate: Wed Feb 11 19:18:23 2026 -0800

    fix(types): add explicit types for extendedDayjs plugin methods
    
    The extendedDayjs export was typed as `typeof dayjs` which didn't
    include the plugin methods (utc, tz, duration, etc.) added at runtime.
    This caused TS2339 errors in consuming code when calling methods like
    `extendedDayjs.utc()`.
    
    Added explicit `ExtendedDayjs` and `ExtendedDayjsFactory` interfaces
    that include all the plugin methods, making the types match the runtime
    behavior.
    
    Co-Authored-By: Claude Opus 4.5 <[email protected]>
---
 .../packages/superset-ui-core/src/utils/dates.ts   | 52 ++++++++++++++++++++--
 1 file changed, 48 insertions(+), 4 deletions(-)

diff --git a/superset-frontend/packages/superset-ui-core/src/utils/dates.ts 
b/superset-frontend/packages/superset-ui-core/src/utils/dates.ts
index 9594f15c988..eb099035843 100644
--- a/superset-frontend/packages/superset-ui-core/src/utils/dates.ts
+++ b/superset-frontend/packages/superset-ui-core/src/utils/dates.ts
@@ -17,13 +17,13 @@
  * under the License.
  */
 
-import dayjs, { Dayjs } from 'dayjs';
+import dayjs, { Dayjs, ConfigType } from 'dayjs';
 import utc from 'dayjs/plugin/utc';
 import timezone from 'dayjs/plugin/timezone';
 import calendar from 'dayjs/plugin/calendar';
 import relativeTime from 'dayjs/plugin/relativeTime';
 import customParseFormat from 'dayjs/plugin/customParseFormat';
-import duration from 'dayjs/plugin/duration';
+import duration, { Duration, DurationUnitType } from 'dayjs/plugin/duration';
 import updateLocale from 'dayjs/plugin/updateLocale';
 import localizedFormat from 'dayjs/plugin/localizedFormat';
 
@@ -40,8 +40,52 @@ dayjs.updateLocale('en', {
   invalidDate: 'Invalid date',
 });
 
-export const extendedDayjs = dayjs;
-export type { Dayjs };
+/**
+ * Extended dayjs instance with all plugins loaded.
+ * Explicitly typed to include plugin methods that are added at runtime.
+ */
+export interface ExtendedDayjs extends Dayjs {
+  utc(keepLocalTime?: boolean): Dayjs;
+  local(): Dayjs;
+  isUTC(): boolean;
+  tz(timezone?: string, keepLocalTime?: boolean): Dayjs;
+  fromNow(withoutSuffix?: boolean): string;
+  toNow(withoutSuffix?: boolean): string;
+  from(compared: ConfigType, withoutSuffix?: boolean): string;
+  to(compared: ConfigType, withoutSuffix?: boolean): string;
+  calendar(referenceTime?: ConfigType, formats?: object): string;
+}
+
+/**
+ * Extended dayjs static interface with all plugins loaded.
+ */
+export interface ExtendedDayjsFactory {
+  (config?: ConfigType, format?: string, strict?: boolean): ExtendedDayjs;
+  utc(config?: ConfigType, format?: string, strict?: boolean): ExtendedDayjs;
+  tz: {
+    (input?: ConfigType, timezone?: string): ExtendedDayjs;
+    (input?: ConfigType, format?: string, timezone?: string): ExtendedDayjs;
+    guess(): string;
+    setDefault(timezone?: string): void;
+  };
+  duration(input?: number | string | object, unit?: DurationUnitType): 
Duration;
+  isDuration(d: unknown): d is Duration;
+  unix(timestamp: number): ExtendedDayjs;
+  locale(preset?: string | object, object?: object, isLocal?: boolean): string;
+  updateLocale(locale: string, customConfig: object): object;
+  extend<T = unknown>(
+    plugin: (
+      option: T,
+      dayjsClass: typeof Dayjs,
+      dayjsFactory: typeof dayjs,
+    ) => void,
+    option?: T,
+  ): typeof dayjs;
+  isDayjs(d: unknown): d is Dayjs;
+}
+
+export const extendedDayjs = dayjs as unknown as ExtendedDayjsFactory;
+export type { Dayjs, Duration, ConfigType };
 
 export const fDuration = function (
   t1: number,

Reply via email to