{ "root": true, "env": { "node": true, "es2022": true, "jest": true }, "extends": [ "eslint:recommended", "@typescript-eslint/recommended" ], "parser": "@typescript-eslint/parser", "parserOptions": { "ecmaVersion": 2022, "sourceType": "module", "ecmaFeatures": { "jsx": true } }, "plugins": [ "@typescript-eslint", "react", "react-hooks" ], "rules": { // 基础规则 "no-console": ["warn", { "allow": ["warn", "error"] }], "no-debugger": "error", "no-unused-vars": "off", "@typescript-eslint/no-unused-vars": ["error", { "argsIgnorePattern": "^_" }], // TypeScript规则 "@typescript-eslint/explicit-function-return-type": "off", "@typescript-eslint/explicit-module-boundary-types": "off", "@typescript-eslint/no-explicit-any": "warn", "@typescript-eslint/no-empty-function": "warn", // React规则 "react/prop-types": "off", "react/react-in-jsx-scope": "off", "react-hooks/rules-of-hooks": "error", "react-hooks/exhaustive-deps": "warn", // 代码风格 "indent": ["error", 2], "quotes": ["error", "single"], "semi": ["error", "always"], "comma-dangle": ["error", "only-multiline"], "object-curly-spacing": ["error", "always"], "array-bracket-spacing": ["error", "never"], // 最佳实践 "eqeqeq": ["error", "always"], "no-var": "error", "prefer-const": "error", "prefer-arrow-callback": "error", "arrow-spacing": "error", "no-duplicate-imports": "error", // 安全规则 "no-eval": "error", "no-implied-eval": "error", "no-new-func": "error", "no-script-url": "error" }, "overrides": [ { "files": ["client/src/**/*"], "env": { "browser": true, "node": false }, "extends": [ "react-app", "react-app/jest" ] }, { "files": ["server/**/*"], "env": { "node": true, "browser": false }, "rules": { "no-console": "off" } }, { "files": ["**/*.test.js", "**/*.test.ts", "**/*.test.tsx"], "env": { "jest": true }, "rules": { "@typescript-eslint/no-explicit-any": "off" } } ], "settings": { "react": { "version": "detect" } } }