是否存在禁止使用.js文件、偏好.ts文件的ESLint规则?
强制新文件使用.ts后缀的ESLint解决方案
方案1:自定义ESLint规则
完全可以自己编写ESLint规则实现这个需求,步骤如下:
- 在项目中创建自定义规则文件,比如
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 {}; }, };
- 在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" } } ] };
- 在
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
相关产品推荐
相关产品推荐

