TypeScript 如何在模块声明中使用映射类型?

TypeScript how to use mapped type in module declaration?

我需要为外部模块创建类型声明。我需要为此声明创建一个映射类型,但未能这样做,模块看起来像

declare module "deferred-regl"{
  import { Regl } from 'regl'

  type IDregl<T> = {
    setRegl: (regl?: Regl) => void
    queue: any[]
    setQueue: (queuInput: any[]) => void
    (): IDregl<Regl>
    [K in keyof T]: () => <T[K]>
  };

  export default function defRegl(): IDregl<Regl>
}

[K in keyof T]: () => <T[K]> 行失败 有错误:

Cannot find name 'K'. [2304]
Cannot find name 'keyof'. [2304]

和其他语法错误 我想创建一个使用一些新属性和方法扩展 Regl 类型的类型。但也采用 Regl 上的现有键并用函数包装它们 我以前使用的是

这样的界面
  export interface IDregl extends Regl{
    setRegl: (regl?: Regl) => void
    queue: any[]
    setQueue: (queuInput: any[]) => void
    (): IDregl
  }

但无法弄清楚如何将 Regl 属性注释为函数并从接口更改为类型

有一些发布了这种类型定义。

  • 我相信您不能在语法上将映射类型与已知属性一起声明在同一范围内
  • () => <T[K]> 不是有效的类型定义

我相信您正在寻找的是这样的东西:

declare module "deferred-regl"{
  import { Regl } from 'regl'

  type IDregl<T> = {
    setRegl: (regl?: Regl) => void
    queue: any[]
    setQueue: (queuInput: any[]) => void
    (): IDregl<Regl>
  } & {
    [K in keyof T]: () => T[K]
  };

  export default function defRegl(): IDregl<Regl>
}