You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

问题原因

你遇到的报错是语法规则不匹配导致的,核心错误点有两个:

  • 映射语法[K in keyof T]不能和普通固定字段、调用签名写在同一个对象类型声明块内,必须拆分为独立映射类型,再通过&交叉类型合并其他字段
  • 返回值写法() => <T[K]>存在语法错误,返回值类型不需要包裹尖括号,直接写T[K]即可

正确实现代码

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

  // 拆分三部分:自定义字段 + 调用签名 + 映射包装原T的所有属性为函数返回
  type IDregl<T> = {
    setRegl: (regl?: Regl) => void
    queue: any[]
    setQueue: (queuInput: any[]) => void
  } & {
    // 调用签名单独放一个交叉块
    (): IDregl<Regl>
  } & {
    // 映射类型单独定义,把T所有属性包装为返回对应值的函数
    [K in keyof T]: () => T[K]
  };

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

实现说明

  • 最终生成的IDregl<Regl>会同时包含你新增的3个自定义方法、可调用签名,以及Regl类型上所有原有属性,且原有属性的类型都会被包装为() => 原属性类型,完全匹配你的需求
  • 这种交叉映射类型的写法无法用interface实现,是TypeScript中批量重写继承类型所有属性的标准方案

内容的提问来源于stack exchange,提问作者kevzettler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 23:45:02