【问题标题】:Augment dayjs with dayjs-recur plugin types使用 dayjs-recur 插件类型增强 dayjs
【发布时间】:2022-11-11 06:25:39
【问题描述】:

所以情况就是这样,我在我的项目中使用dayjsdayjs-recur 插件,但是tsc 抱怨它找不到类型声明。所以我使用dayjs-recur.d.ts 中的以下代码解决了这个问题:

declare module 'dayjs-recur' {
  import { PluginFunc } from 'dayjs';
  const defaultExport: PluginFunc<unknown>;
  export = defaultExport;
}

虽然满足 LSP 还不够,但我还必须增加 dayjs 命名空间。通过查找typescript documentation,我想出了以下sn-p:

declare module 'dayjs-recur' {
  import { Dayjs, PluginFunc } from 'dayjs';

  interface RecurPlugin {
    every(...args: any): RecurPlugin;
    daysOfMonth(): RecurPlugin;
    fromDate(date: any): RecurPlugin;
    next(any: any): Dayjs;
    all(): Dayjs[];
  }

  const defaultExport: PluginFunc<unknown>;
  export = defaultExport;

  namespace dayjs {
    export function recur(...args: any): RecurPlugin;
  }
}

但它似乎没有做任何事情。有什么建议么?

【问题讨论】:

    标签: typescript types dayjs


    【解决方案1】:

    这是我最终想到的:

    declare module 'dayjs-recur' {
      interface DayjsRecur {
        ...
      }
    
      declare module 'dayjs' { // <--- HERE is what I was doing wrong
        export function recur(...args: any): DayjsRecur;
      }
    
      const defaultExport: PluginFunc<unknown>;
      export = defaultExport;
    }
    

    这是我的最终类型声明以供将来参考:

    // dayjs-recur.d.ts
    
    declare module 'dayjs-recur' {
      import { Dayjs, PluginFunc } from 'dayjs';
    
      interface Recurrence {
        every(unit: number | string, measurementType?: string): Recurrence;
        every(units: number[] | string[], measurementType?: string): Recurrence;
        day(unit?: string): Recurrence;
        days(unit?: string): Recurrence;
        week(unit?: string): Recurrence;
        weeks(unit?: string): Recurrence;
        month(unit?: string): Recurrence;
        months(unit?: string): Recurrence;
        year(unit?: string): Recurrence;
        years(unit?: string): Recurrence;
        dayOfWeek(unit?: string): Recurrence;
        daysOfWeek(unit?: string): Recurrence;
        dayOfMonth(unit?: string): Recurrence;
        daysOfMonth(unit?: string): Recurrence;
        weekOfMonth(unit?: string): Recurrence;
        weeksOfMonth(unit?: string): Recurrence;
        weekOfYear(unit?: string): Recurrence;
        weeksOfYear(unit?: string): Recurrence;
        monthOfYear(unit?: string): Recurrence;
        monthsOfYear(unit?: string): Recurrence;
        forget(date: string): Recurrence;
        except(date: string): Recurrence;
        matches(date: string, outbound?: boolean): boolean;
        fromDate(date: string | Dayjs): Recurrence;
        next(count?: number): Dayjs | Dayjs[];
        previous(count?: number): Dayjs | Dayjs[];
        all(): Dayjs[];
      }
    
      declare module 'dayjs' {
        export function recur(): Recurrence;
        export function recur(
          start?: string | Dayjs,
          end?: string | Dayjs,
        ): Recurrence;
        export function recur(options: {
          start: string | Dayjs;
          end: string | Dayjs;
        }): Recurrence;
    
        interface Dayjs {
          recur(): Recurrence;
          recur(start?: string | Dayjs, end?: string | Dayjs): Recurrence;
          recur(options: {
            start: string | Dayjs;
            end: string | Dayjs;
          }): Recurrence;
        }
      }
    
      const defaultExport: PluginFunc<unknown>;
      export = defaultExport;
    }
    

    更新

    您现在可以使用以下命令安装类型定义:(感谢 cmets 部分中的@leog)

    $ npm i -D @types/dayjs-recur
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-15
    • 2022-08-18
    • 2022-11-14
    • 2022-07-14
    • 1970-01-01
    • 2021-10-13
    • 2022-08-04
    • 1970-01-01
    相关资源
    最近更新 更多