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

如何在不禁用规则时解决ESLint针对Disposable接口的redundant-type-constituents错误

解决TypeScript 5.2中交叉Disposable接口触发ESLint错误的问题

你遇到的问题是ESLint规则@typescript-eslint/no-redundant-type-constituents误将Disposable接口识别为any,导致交叉类型被判定为冗余。以下是几种无需禁用规则的解决方法:

  • 直接使用Symbol.dispose的结构定义
    跳过Disposable接口,直接在交叉类型中写出它的核心结构,彻底避免ESLint的误判:

    type MyType = {
      foo: () => void;
    } & { [Symbol.dispose]: () => void };
    

    这个写法完全符合TypeScript 5.2中Disposable接口的定义,功能和原代码一致。

  • 确保TypeScript正确加载Disposable类型
    检查你的tsconfig.json,确保compilerOptions.lib包含ES2022.Disposable或ESNext,让TypeScript能正确识别Disposable接口的类型,而非将其推断为any:

    {
      "compilerOptions": {
        "lib": ["ESNext", "DOM"]
      }
    }
    

    配置完成后重新编译,ESLint应该就不会再触发错误。

  • 用工具类型包装Disposable消除歧义
    如果你坚持要使用Disposable接口,可以创建一个工具类型明确它的类型,避免ESLint误判:

    // 确保Disposable不是any类型
    type NonAnyDisposable = Disposable extends any ? never : Disposable;
    
    type MyType = {
      foo: () => void;
    } & NonAnyDisposable;
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 23:40:00