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

Typescript无需明确泛型具体类型时有无类似Java<?>替代any的写法

TypeScript没有和Java <?>完全一致的原生通配符语法,可通过以下几种方案实现等价效果,均不需要全局关闭ESLint的any禁用规则:

  • 方案1:给函数添加带约束的泛型参数(最通用的标准写法)
    直接给函数本身声明符合泛型约束的参数,不需要修改原有业务逻辑,类型校验完全合法,也不会触发告警:
    function doSimpleThings<T extends ElaborateStuff>(stuff: SomeStuff<T>): void {
      // 原有逻辑保持不变
    }
    
  • 方案2:直接传入约束基类作为泛型参数
    绝大多数普通使用场景下SomeStuff的泛型为协变,直接传入基类ElaborateStuff即可满足类型要求:
    function doSimpleThings(stuff: SomeStuff<ElaborateStuff>): void {...}
    
  • 方案3:使用infer实现匿名通配符(TS 4.7及以上版本支持)
    写法更贴近Java通配符,不需要给函数额外声明泛型参数:
    function doSimpleThings(stuff: SomeStuff<infer _ extends ElaborateStuff>): void {...}
    
  • 方案4:单行禁用ESLint规则
    如果你不想修改类型定义,可以只针对当前行关闭any告警,不会影响全局规则生效:
    // eslint-disable-next-line @typescript-eslint/no-explicit-any
    function doSimpleThings(stuff: SomeStuff<any>): void {...}
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 22:45:11