import js from '@eslint/js'; import pluginVue from 'eslint-plugin-vue'; import * as parserVue from 'vue-eslint-parser'; import configPrettier from 'eslint-config-prettier'; import pluginPrettier from 'eslint-plugin-prettier'; import * as parserTypeScript from '@typescript-eslint/parser'; import pluginTypeScript from '@typescript-eslint/eslint-plugin'; export default [ { ...js.configs.recommended, ignores: ['**/.*', '*.d.ts', 'public/*', 'dist/*', 'src/assets/**'], languageOptions: { globals: {} }, plugins: { prettier: pluginPrettier }, rules: { ...configPrettier.rules, ...pluginPrettier.configs.recommended.rules, // 禁止使用 var 'no-var': 'error', // 禁止使用 console 'no-console': 'off', // 禁止使用 debugger 'no-debugger': 'error', // 禁止不必要的转义字符 'no-useless-escape': 'off', // 禁止出现未使用过的变量,忽略 _ 开头的参数和变量 'no-unused-vars': [ 'warn', { argsIgnorePattern: '^_', varsIgnorePattern: '^_' } ], 'prettier/prettier': [ 'error', { endOfLine: 'auto' } ] } }, { files: ['**/*.?([cm])ts', '**/*.?([cm])tsx'], languageOptions: { parser: parserTypeScript, parserOptions: { sourceType: 'module' } }, plugins: { '@typescript-eslint': pluginTypeScript }, rules: { ...pluginTypeScript.configs.strict.rules, '@typescript-eslint/ban-types': 'off', // 检查并报错重复声明的变量 '@typescript-eslint/no-redeclare': 'error', // 关闭对 TypeScript 注释的限制 '@typescript-eslint/ban-ts-comment': 'off', // 允许使用显式的 `any` 类型 '@typescript-eslint/no-explicit-any': 'off', // 建议使用 `as const` 而不是 `const` 断言类型 '@typescript-eslint/prefer-as-const': 'warn', // 允许使用非空断言 `!` '@typescript-eslint/no-non-null-assertion': 'off', // 强制导入类型时不产生副作用 '@typescript-eslint/no-import-type-side-effects': 'error', // 关闭对显式指定导出函数和类的类型的要求 '@typescript-eslint/explicit-module-boundary-types': 'off', // 强制一致的类型导入方式 '@typescript-eslint/consistent-type-imports': [ 'error', { disallowTypeAnnotations: false, fixStyle: 'inline-type-imports' } ], // 建议优先使用字面量枚举成员 '@typescript-eslint/prefer-literal-enum-member': [ 'error', { allowBitwiseExpressions: true } ], '@typescript-eslint/no-unused-vars': [ 'warn', { argsIgnorePattern: '^_', varsIgnorePattern: '^_' } ] } }, { files: ['**/*.?([cm])js'], rules: { '@typescript-eslint/no-require-imports': 'off', '@typescript-eslint/no-var-requires': 'off' } }, { files: ['**/*.d.ts'], rules: { 'eslint-comments/no-unlimited-disable': 'off', 'import/no-duplicates': 'off', 'unused-imports/no-unused-vars': 'off' } }, { files: ['**/*.vue'], languageOptions: { globals: {}, parser: parserVue, parserOptions: { ecmaFeatures: { jsx: true }, extraFileExtensions: ['.vue'], parser: '@typescript-eslint/parser', sourceType: 'module' } }, plugins: { vue: pluginVue }, processor: pluginVue.processors['.vue'], rules: { ...pluginVue.configs.base.rules, ...pluginVue.configs['vue3-essential'].rules, ...pluginVue.configs['vue3-recommended'].rules, // 关闭对于组件 props 需要默认值的检查 'vue/require-default-prop': 'off', // 关闭对于单行 HTML 元素内容换行的检查 'vue/singleline-html-element-content-newline': 'off', // 关闭对于每行 HTML 属性数量的限制检查 'vue/max-attributes-per-line': 'off', // 强制自定义事件的命名为驼峰式命名 'vue/custom-event-name-casing': ['error', 'camelCase'], // 显示警告,不建议使用 v-text 指令 'vue/no-v-text': 'warn', // 显示警告,建议在 Vue 组件中添加间距行 'vue/padding-line-between-blocks': 'warn', // 显示警告,建议直接导出 Vue 组件 'vue/require-direct-export': 'warn', // 允许使用单个单词作为组件名 'vue/multi-word-component-names': 'off', // 关闭对于 TypeScript 注释的检查 '@typescript-eslint/ban-ts-comment': 'off', // 关闭对于显式声明 any 类型的检查 '@typescript-eslint/no-explicit-any': 'off', 'no-unused-vars': 'off' } } ];