簡體   English   中英

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>
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM