ESLint plugin that wraps a TSLint configuration and lints the whole source using TSLint
npx @tessl/cli install tessl/npm-typescript-eslint--eslint-plugin-tslint@7.0.0TypeScript ESLint Plugin TSLint is an ESLint plugin that provides a bridge between ESLint and TSLint by wrapping TSLint configurations and enabling the use of TSLint rules within an ESLint workflow. It allows developers to gradually migrate from TSLint to ESLint while maintaining existing TSLint rules and configurations.
npm install @typescript-eslint/eslint-plugin-tslint// When using the plugin programmatically
import { meta, rules } from "@typescript-eslint/eslint-plugin-tslint";
// or
import * as eslintPluginTslint from "@typescript-eslint/eslint-plugin-tslint";For CommonJS:
const { meta, rules } = require("@typescript-eslint/eslint-plugin-tslint");
// or
const eslintPluginTslint = require("@typescript-eslint/eslint-plugin-tslint");// ESLint configuration (.eslintrc.js)
module.exports = {
parser: "@typescript-eslint/parser",
parserOptions: {
project: "./tsconfig.json"
},
plugins: ["@typescript-eslint/tslint"],
rules: {
"@typescript-eslint/tslint/config": [
"error",
{
rules: {
semicolon: [true, "always"],
"no-string-throw": true
}
}
]
}
};The plugin is built around these key components:
metaThe plugin exports metadata information containing the plugin name and version.
import type { Linter } from '@typescript-eslint/utils/ts-eslint';
export const meta: Linter.PluginMeta;
// Linter.PluginMeta is defined in @typescript-eslint/utils/ts-eslint
// and contains:
// {
// name: string;
// version: string;
// }The plugin exports a rules object containing the single "config" rule.
import type { Linter } from '@typescript-eslint/utils/ts-eslint';
export const rules: Linter.PluginRules;
// The rules object contains a single rule:
// {
// config: ESLintRule
// }The main rule that wraps TSLint configuration and applies TSLint rules through ESLint.
// Rule name: "config"
// Usage: "@typescript-eslint/tslint/config"
interface RuleOptions {
/** TSLint rules configuration */
rules?: RawRulesConfig;
/** Custom TSLint rules directories */
rulesDirectory?: string[];
/** Path to TSLint configuration file */
lintFile?: string;
}
type RawRulesConfig = Record<
string,
| unknown[]
| boolean
| {
severity?: RuleSeverity | 'default' | 'none' | 'warn';
options?: unknown;
}
| null
| undefined
>;
type RuleSeverity = 'error' | 'warning' | 'info' | 'hint';Usage Examples:
// Inline rules configuration
{
"@typescript-eslint/tslint/config": [
"error",
{
rules: {
semicolon: [true, "always"],
"no-string-throw": true,
"restrict-plus-operands": true
}
}
]
}
// External TSLint file configuration
{
"@typescript-eslint/tslint/config": [
"error",
{
lintFile: "./tslint.json"
}
]
}
// Custom rules directory
{
"@typescript-eslint/tslint/config": [
"error",
{
rulesDirectory: ["./custom-tslint-rules"],
rules: {
"custom-rule": {
severity: "error",
options: { customOption: true }
}
}
}
]
}Extended TSLint Linter class that provides access to TypeScript compiler program.
import type { ILinterOptions, LintResult } from 'tslint';
import { Linter } from 'tslint';
import type { Program, SourceFile } from 'typescript';
class CustomLinter extends Linter {
constructor(
options: ILinterOptions,
private readonly program: Program
);
/** Get the linting results from TSLint */
getResult(): LintResult;
/** Get a TypeScript source file from the program */
getSourceFile(fileName: string): SourceFile | undefined;
}
// ILinterOptions and LintResult are imported from 'tslint'
// Program and SourceFile are imported from 'typescript'type MessageIds = 'failure';
type Options = [
{
rules?: RawRulesConfig;
rulesDirectory?: string[];
lintFile?: string;
}
];The plugin handles errors by:
Common error scenarios:
parserOptions.project configuration (required for TypeScript parsing)lintFile optionrulesDirectory^8.56.0 - ESLint linting framework^5.0.0 || ^6.0.0 - TSLint linting library* - TypeScript compiler7.0.2 - TypeScript ESLint utilitiesnpm install @typescript-eslint/eslint-plugin-tslint tslint typescriptRequired ESLint configuration:
module.exports = {
parser: "@typescript-eslint/parser",
parserOptions: {
project: "./tsconfig.json", // Required for TypeScript parsing
ecmaVersion: 2018,
sourceType: "module"
},
plugins: ["@typescript-eslint/tslint"],
rules: {
"@typescript-eslint/tslint/config": [
"error",
{
// TSLint configuration options
}
]
}
};