Skip to main content

prefer-ts-expect-error

Enforce using @ts-expect-error over @ts-ignore.

TypeScript allows you to suppress all errors on a line by placing a single-line comment or a comment block line starting with @ts-ignore immediately before the erroring line. While powerful, there is no way to know if a @ts-ignore is actually suppressing an error without manually investigating what happens when the @ts-ignore is removed.

This means its easy for @ts-ignores to be forgotten about, and remain in code even after the error they were suppressing is fixed. This is dangerous, as if a new error arises on that line it'll be suppressed by the forgotten about @ts-ignore, and so be missed.

To address this, TS3.9 ships with a new single-line comment directive: // @ts-expect-error.

This directive operates in the same manner as @ts-ignore, but will error if the line it's meant to be suppressing doesn't actually contain an error, making it a lot safer.

Attributes

  • Included in configs
    • ✅ Recommended
    • 🔒 Strict
  • Fixable
    • 🔧 Automated Fixer
    • 🛠 Suggestion Fixer
  • 💭 Requires type information

Rule Details

This rule looks for usages of @ts-ignore, and flags them to be replaced with @ts-expect-error.

Examples of code for this rule:

// @ts-ignore
const str: string = 1;

/**
* Explaining comment
*
* @ts-ignore */
const multiLine: number = 'value';

/** @ts-ignore */
const block: string = 1;

const isOptionEnabled = (key: string): boolean => {
// @ts-ignore: if key isn't in globalOptions it'll be undefined which is false
return !!globalOptions[key];
};

Options

// .eslintrc.json
{
"rules": {
"@typescript-eslint/prefer-ts-expect-error": "warn"
}
}

This rule is not configurable.

When Not To Use It

If you are NOT using TypeScript 3.9 (or greater), then you will not be able to use this rule, as the directive is not supported

Further Reading