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

如何解决ESLint的no-inner-declarations报错且无需将module改为class?

解决方案

有两种无需改为类的方案可以解决该报错:

方案1:调整ESLint规则配置(最推荐,无需修改业务代码)

你遇到的no-inner-declarations报错属于ESLint核心规则对TypeScript特有语法的兼容问题:核心规则无法识别TS的module/namespace块的特殊作用域属性,会将其判定为普通块级作用域,因此把块内的函数声明识别为非法的块内声明。
你可以按如下步骤修改配置:

  • 关闭ESLint核心的no-inner-declarations规则
  • 启用@typescript-eslint插件提供的@typescript-eslint/no-inner-declarations规则,该规则对TS语法做了适配,不会对namespace/module块内的合法声明误报
    对应.eslintrc配置参考:
{
  "rules": {
    "no-inner-declarations": "off",
    "@typescript-eslint/no-inner-declarations": "error"
  }
}

方案2:调整代码写法,将内部函数声明改为函数表达式

如果不方便修改ESLint配置,可以将模块内的私有函数从函数声明写法改为函数表达式赋值,no-inner-declarations规则只会拦截函数/变量声明语句,不会拦截赋值操作:

export module Foo {
    const foos = []

    export function getFoos() {
        return getLastFoo();
    }

    // 改为箭头函数表达式,规避声明检测
    const getLastFoo = () => {
        return foos[-1]
    }
}

额外提示:export module是TypeScript的旧版语法,更推荐替换为语义更明确的export namespace Foo写法,可以减少部分工具的语法识别异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 13:45:03