首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用dayjs增加dayjs-重新出现插件类型

用dayjs增加dayjs-重新出现插件类型
EN

Stack Overflow用户
提问于 2022-09-14 07:20:44
回答 1查看 56关注 0票数 0

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

代码语言:javascript
复制
declare module 'dayjs-recur' {
  import { PluginFunc } from 'dayjs';
  const defaultExport: PluginFunc<unknown>;
  export = defaultExport;
}

虽然这还不足以满足LSP,但我还必须扩展dayjs命名空间。通过查找打字本文件,我得到了以下片段:

代码语言:javascript
复制
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;
  }
}

但它似乎什么也没做。有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-18 05:38:47

以下是我最后想出的:

代码语言:javascript
复制
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;
}

这是我的最后类型声明,供将来参考:

代码语言:javascript
复制
// 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;
}

更新

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

代码语言:javascript
复制
$ npm i -D @types/dayjs-recur
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73712940

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档