TypeScript stylistic rules for ESLint providing comprehensive code style enforcement for modern ESLint configurations.
npx @tessl/cli install tessl/npm-stylistic--eslint-plugin-ts@4.4.0⚠️ DEPRECATION NOTICE: This package is deprecated in favor of the unified @stylistic/eslint-plugin. Please consider migrating to the main package.
ESLint Stylistic TypeScript Plugin provides TypeScript-specific stylistic and formatting rules for ESLint. This package serves as a community-maintained alternative after ESLint and typescript-eslint teams deprecated formatting rules from their core packages, offering comprehensive TypeScript code style enforcement for modern ESLint configurations.
npm install @stylistic/eslint-plugin-ts@stylistic/eslint-plugin (unified package)import stylistic from "@stylistic/eslint-plugin-ts";For CommonJS:
const stylistic = require("@stylistic/eslint-plugin-ts");For specific rules:
import blockSpacing from "@stylistic/eslint-plugin-ts/rules/block-spacing";import stylistic from "@stylistic/eslint-plugin-ts";
// Basic ESLint configuration
export default [
{
plugins: {
"@stylistic/ts": stylistic,
},
rules: {
"@stylistic/ts/indent": ["error", 2],
"@stylistic/ts/quotes": ["error", "single"],
"@stylistic/ts/semi": ["error", "always"],
},
},
];
// Using predefined configurations
export default [
stylistic.configs.all, // Enable all stylistic rules
];The plugin is built around several key components:
Core plugin object providing rules and configuration presets for ESLint integration.
interface Plugin {
rules: Rules;
configs: {
"disable-legacy": Linter.Config;
"all": Linter.Config;
"all-flat": Linter.Config; // @deprecated use 'all' instead
};
}
interface Rules {
[K in keyof UnprefixedRuleOptions]: Rule.RuleModule;
}Collection of 25 TypeScript-specific formatting and style rules including spacing, indentation, quotes, semicolons, and object/array formatting.
interface UnprefixedRuleOptions {
"block-spacing": BlockSpacingRuleOptions;
"brace-style": BraceStyleRuleOptions;
"comma-dangle": CommaDangleRuleOptions;
"comma-spacing": CommaSpacingRuleOptions;
"func-call-spacing": FunctionCallSpacingRuleOptions;
"function-call-spacing": FunctionCallSpacingRuleOptions;
"indent": IndentRuleOptions;
"key-spacing": KeySpacingRuleOptions;
"keyword-spacing": KeywordSpacingRuleOptions;
"lines-around-comment": LinesAroundCommentRuleOptions;
"lines-between-class-members": LinesBetweenClassMembersRuleOptions;
"member-delimiter-style": MemberDelimiterStyleRuleOptions;
"no-extra-parens": NoExtraParensRuleOptions;
"no-extra-semi": NoExtraSemiRuleOptions;
"object-curly-newline": ObjectCurlyNewlineRuleOptions;
"object-curly-spacing": ObjectCurlySpacingRuleOptions;
"object-property-newline": ObjectPropertyNewlineRuleOptions;
"padding-line-between-statements": PaddingLineBetweenStatementsRuleOptions;
"quote-props": QuotePropsRuleOptions;
"quotes": QuotesRuleOptions;
"semi": SemiRuleOptions;
"semi-spacing": SemiSpacingRuleOptions;
"space-before-blocks": SpaceBeforeBlocksRuleOptions;
"space-before-function-paren": SpaceBeforeFunctionParenRuleOptions;
"space-infix-ops": SpaceInfixOpsRuleOptions;
"type-annotation-spacing": TypeAnnotationSpacingRuleOptions;
}import type { Linter, Rule } from "eslint";
interface Rules {
[K in keyof UnprefixedRuleOptions]: Rule.RuleModule;
}
declare const plugin: {
rules: Rules;
configs: {
"disable-legacy": Linter.Config;
"all": Linter.Config;
"all-flat": Linter.Config;
};
};