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

是否存在禁止使用.js文件、偏好.ts文件的ESLint规则?

强制新文件使用.ts后缀的ESLint解决方案

方案1:自定义ESLint规则

完全可以自己编写ESLint规则实现这个需求,步骤如下:

  1. 在项目中创建自定义规则文件,比如eslint-rules/no-new-js-files.js:
module.exports = {
  meta: {
    type: "suggestion",
    docs: {
      description: "禁止新增.js/.jsx文件,强制使用.ts/.tsx后缀",
      category: "TypeScript",
      recommended: true,
    },
    messages: {
      forbiddenJs: "新文件请使用.ts/.tsx后缀,禁止使用.js/.jsx",
    },
  },
  create(context) {
    const filename = context.getFilename();
    const isJsFile = /\.jsx?$/.test(filename);

    // 可添加逻辑排除原有JS文件(比如维护白名单、结合git历史判断)
    if (isJsFile) {
      context.report({
        messageId: "forbiddenJs",
        loc: { line: 1, column: 1 },
      });
    }

    return {};
  },
};
  1. 在ESLint配置文件(如.eslintrc.js)中引入该规则:
module.exports = {
  // ...其他配置
  plugins: ["local-rules"],
  rules: {
    "local-rules/no-new-js-files": "error"
  },
  overrides: [
    {
      files: ["src/**/*"], // 可指定生效目录
      rules: {
        "local-rules/no-new-js-files": "error"
      }
    }
  ]
};
  1. 在package.json中配置本地插件路径:
{
  "eslint-plugin-local-rules": {
    "rules": "./eslint-rules"
  }
}

方案2:结合lint-staged过滤新增文件

如果只想检查新增的JS文件(不影响原有JS代码),可以用lint-staged配合脚本实现:
在package.json中添加:

{
  "lint-staged": {
    "*.js": [
      "bash -c 'if git diff --name-only --cached $0 | grep -q \"^$0\"; then echo \"Error: 新文件禁止使用.js后缀,请改为.ts\"; exit 1; fi'"
    ]
  }
}

该脚本会检查暂存区的新增.js文件,若为新文件则直接报错。

方案3:利用现有插件的替代规则

虽然eslint-plugin-filenames不检查扩展名,但可以用eslint-plugin-unicorn的filename-case规则配合正则限制:

module.exports = {
  rules: {
    "unicorn/filename-case": [
      "error",
      {
        cases: {
          regex: /\.tsx?$/ // 只允许.ts/.tsx后缀的文件
        }
      }
    ]
  }
};

注意事项

  • 若要保留原有JS文件不被检查,需通过.eslintignore或自定义规则中的白名单逻辑排除,避免误报。
  • 自定义规则可根据项目需求扩展,比如支持.tsx、区分不同目录的规则等。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 05:05:31