首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TypeScript如何在模块声明中使用映射类型?

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

Stack Overflow用户
提问于 2021-06-24 01:10:23
回答 1查看 136关注 0票数 1

我需要为外部模块创建一个类型声明。我需要为这个声明创建一个映射类型,如果做不到,模块看起来就像

代码语言:javascript
复制
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]>行上失败,有错误:

代码语言:javascript
复制
Cannot find name 'K'. [2304]
Cannot find name 'keyof'. [2304]

以及其他语法错误,我想要创建一个类型,用一些新的属性和方法扩展Regl类型。但同时也获取Regl上现有的键,并将它们封装在我以前使用的接口中,如

代码语言:javascript
复制
  export interface IDregl extends Regl{
    setRegl: (regl?: Regl) => void
    queue: any[]
    setQueue: (queuInput: any[]) => void
    (): IDregl
  }

但不知道如何将Regl属性注释为函数,并从接口更改为类型。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-24 13:22:32

有一些带有此类型定义的。

我相信您不能在同一范围内声明映射类型和已知属性,syntactically

  • () => <T[K]>不是有效的类型定义

我相信你要找的是:

代码语言:javascript
复制
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>
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68108494

复制
相关文章

相似问题

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