or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

index.md
tile.json

tessl/npm-typescript-eslint--eslint-plugin-tslint

ESLint plugin that wraps a TSLint configuration and lints the whole source using TSLint

Workspace
tessl
Visibility
Public
Created
Last updated
Describes
npmpkg:npm/@typescript-eslint/eslint-plugin-tslint@7.0.x

To install, run

npx @tessl/cli install tessl/npm-typescript-eslint--eslint-plugin-tslint@7.0.0

index.mddocs/

TypeScript ESLint Plugin TSLint

TypeScript 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.

Package Information

  • Package Name: @typescript-eslint/eslint-plugin-tslint
  • Package Type: npm
  • Language: TypeScript
  • Installation: npm install @typescript-eslint/eslint-plugin-tslint

Core Imports

// 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");

Basic Usage

// 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
        }
      }
    ]
  }
};

Architecture

The plugin is built around these key components:

  • Plugin Metadata: Contains name and version information exported as meta
  • Single Rule System: Exposes only one rule called "config" that wraps TSLint functionality
  • Custom Linter: Extends TSLint's Linter class to integrate with TypeScript compiler program
  • Configuration Bridge: Converts ESLint configuration to TSLint configuration format
  • Result Transformation: Converts TSLint failures to ESLint report format with auto-fixing support

Capabilities

Plugin Metadata

The 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;
// }

Plugin Rules

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
// }

TSLint Configuration Rule

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 }
        }
      }
    }
  ]
}

Custom Linter Class

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'

Types

type MessageIds = 'failure';

type Options = [
  {
    rules?: RawRulesConfig;
    rulesDirectory?: string[];
    lintFile?: string;
  }
];

Error Handling

The plugin handles errors by:

  • Converting TSLint rule failures to ESLint diagnostic messages
  • Preserving original TSLint error messages and rule names
  • Maintaining source location information for precise error reporting
  • Supporting auto-fix suggestions from TSLint rules when available

Common error scenarios:

  • Missing parserOptions.project configuration (required for TypeScript parsing)
  • TSLint configuration file not found when using lintFile option
  • Custom rules directory path not found when using rulesDirectory
  • TSLint rule configuration errors (invalid rule names or options)

Dependencies

Peer Dependencies

  • eslint: ^8.56.0 - ESLint linting framework
  • tslint: ^5.0.0 || ^6.0.0 - TSLint linting library
  • typescript: * - TypeScript compiler

Internal Dependencies

  • @typescript-eslint/utils: 7.0.2 - TypeScript ESLint utilities

Installation and Setup

npm install @typescript-eslint/eslint-plugin-tslint tslint typescript

Required 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
      }
    ]
  }
};