ESLint configuration library for Vue.js + TypeScript projects with advanced utilities and preset configurations
—
Collection of shared TypeScript-ESLint configurations adapted for Vue single-file components, providing comprehensive rule coverage for different strictness levels and use cases.
Contains all shared configurations from typescript-eslint, modified to work with Vue files in addition to TypeScript files.
/**
* Collection of TypeScript-ESLint configurations adapted for Vue files
* Each config is a TsEslintConfigForVue instance that can be used in defineConfigWithVueTs
*/
const vueTsConfigs: Record<ExtendableConfigName, TsEslintConfigForVue>;
type ExtendableConfigName =
| "all"
| "base"
| "disableTypeChecked"
| "eslintRecommended"
| "recommended"
| "recommendedTypeChecked"
| "recommendedTypeCheckedOnly"
| "strict"
| "strictTypeChecked"
| "strictTypeCheckedOnly"
| "stylistic"
| "stylisticTypeChecked"
| "stylisticTypeCheckedOnly";Usage Examples:
import { defineConfigWithVueTs, vueTsConfigs } from "@vue/eslint-config-typescript";
// Use recommended config (no type checking)
export default defineConfigWithVueTs(vueTsConfigs.recommended);
// Use type-checked recommended config
export default defineConfigWithVueTs(vueTsConfigs.recommendedTypeChecked);
// Use strict type-checked config
export default defineConfigWithVueTs(vueTsConfigs.strictTypeChecked);
// Combine multiple configs
export default defineConfigWithVueTs(
vueTsConfigs.base,
vueTsConfigs.stylistic,
);Wrapper class for typescript-eslint configs that adapts them to work with Vue single-file components.
import type { FlatConfig } from '@typescript-eslint/utils/ts-eslint';
class TsEslintConfigForVue {
/** The name of the config as defined in typescript-eslint */
configName: ExtendableConfigName;
/** Display name for better error messages */
name: string;
constructor(configName: ExtendableConfigName);
/**
* Determines if this config requires type checking services
* @returns true if config includes type-aware rules
*/
needsTypeChecking(): boolean;
/**
* Creates extended version with additional options merged
* @param restOfConfig - Additional configuration options to merge
* @returns New TsEslintConfigForVue instance with merged options
*/
asExtendedWith(restOfConfig: ExtendsOptions): TsEslintConfigForVue;
/**
* Converts to ESLint flat config array with Vue file support
* @returns Array of ESLint configuration objects
*/
toConfigArray(): FlatConfig.ConfigArray;
}
interface ExtendsOptions {
name?: string;
files?: (string | string[])[];
ignores?: string[];
}base: Foundational configuration without specific rule recommendations
vueTsConfigs.baseeslintRecommended: ESLint's recommended rules adapted for TypeScript + Vue
vueTsConfigs.eslintRecommendedrecommended: TypeScript-ESLint recommended rules (no type checking required)
vueTsConfigs.recommendedstrict: Stricter rule set (no type checking required)
vueTsConfigs.strictstylistic: Style-focused rules (no type checking required)
vueTsConfigs.stylisticrecommendedTypeChecked: Recommended rules with type-aware rules enabled
vueTsConfigs.recommendedTypeCheckedrecommendedTypeCheckedOnly: Only type-aware recommended rules
vueTsConfigs.recommendedTypeCheckedOnlystrictTypeChecked: Strict rules with type-aware rules enabled
vueTsConfigs.strictTypeCheckedstrictTypeCheckedOnly: Only type-aware strict rules
vueTsConfigs.strictTypeCheckedOnlystylisticTypeChecked: Stylistic rules with type-aware rules enabled
vueTsConfigs.stylisticTypeCheckedstylisticTypeCheckedOnly: Only type-aware stylistic rules
vueTsConfigs.stylisticTypeCheckedOnlyall: All available rules from typescript-eslint (includes type-aware rules)
vueTsConfigs.alldisableTypeChecked: Explicitly disables type-checked rules
vueTsConfigs.disableTypeCheckedEach configuration automatically:
.vue files in addition to .ts files<script> blocks in Vue filesType-aware configurations require:
Example with type checking:
import { defineConfigWithVueTs, vueTsConfigs, configureVueProject } from "@vue/eslint-config-typescript";
// Configure project for optimal type checking
configureVueProject({
tsSyntaxInTemplates: true,
scriptLangs: ["ts"],
allowComponentTypeUnsafety: true,
});
export default defineConfigWithVueTs(
vueTsConfigs.strictTypeChecked,
{
// Type-aware rules will work on these files
files: ["**/*.{ts,vue}"],
},
);Install with Tessl CLI
npx tessl i tessl/npm-vue--eslint-config-typescript