npm / typescript-eslint
typescript-eslint
What changed in typescript-eslint 8, from its official release notes, upgrade guides and advisories. Sources checked 2026-10-17.
typescript-eslint 8183 changes
Breaking changes 20
Import attribute keys are now restricted to identifiers and strings.
Import attribute values are now required to be string literals.
Reports void on non-call expressions.
The rule now reports identical signatures.
typescript-estree now throws for invalid definite assignment in class properties.
Reports more cases based on assignability.
The rule now uses assignability checks in checkTypePredicates, potentially changing which conditions are reported as unnecessary.
The rule now flags banned generics used in extends or implements.
The rule now requires strictNullChecks.
Invalid modifiers in object expressions are now forbidden.
The rule now checks both the base constraint and actual type for non-null assertions.
Invalid class implements declarations are now rejected.
Invalid import equals declarations are now rejected.
Invalid extends and implements clauses in interface declarations are now rejected.
Type-only imports using both default and named specifiers are now rejected.
The rule now detects @@toPrimitive and valueOf implementations.
analyze now expects a Program.
Binding patterns in parameter properties are now disallowed.
The parser now errors when projectService and project are configured together.
Invalid modifiers in object methods are now forbidden.
Deprecations 4
Deprecates the extension rule.
Adds a warning when TypeScript 7 is detected.
The no-loop-func rule is deprecated.
defaultOptions is deprecated; use meta.defaultOptions instead.
New APIs and options 18
Adds a rule that detects unsafe enum assignments.
Adds a rule for detecting generated empty object types.
Adds the flagUnions option to checkConditionals.
Rule metadata now supports the ESLint meta.languages property.
Basic globs are now exported for using tseslint.
Adds an option that errors on unsupported TypeScript versions.
The parser now supports parsing import defer syntax.
Detects async usage where a synchronous dispose operation is expected.
The allow configuration now accepts TypeOrValueSpecifier.
ParserServicesWithTypeInformation gains shortcut methods for accessing parser services.
ScopeManager now supports adding globals for integrations that construct or extend scope information.
Project service now accepts Partial<ts.server.ServerHost> values.
A new ESLint rule is available for checking strict void returns.
Adds a new rule to eslint-plugin-internal for detecting multiple lines of errors.
Plugin metadata now includes a namespace.
RuleModule now exposes the rule name.
Adds an ESLint rule that detects useless default assignments.
Adds an extension rule for detecting unused private class members.
Performance 1
Cleanup is throttled when opening files, reducing cleanup activity during file opening.
Behavior and default changes 18
Its fixer is now provided as a suggestion fixer.
The rule now provides fix suggestions for violations.
The parser now handles import.defer() as an ImportExpression.
Throws when import defer syntax is invalid.
Provides specialized errors for enum declaration and member shadowing.
The rule now supports using and await using declarations.
The ArrowFunction type has been tightened.
The TSTypePredicate type has been tightened.
The YieldExpression type has been tightened.
The rule now ignores Array and ReadonlyArray types without type arguments.
Skips the createIsolatedProgram fallback when projectService is used.
Literal loop conditions in for and do loops are now allowed by the rule.
The rule can now automatically remove unused imports.
The rule is no longer marked as fixable.
Parsing failures now produce more informative errors.
Checks base types against the allow list.
All errors are now gated behind allowInvalidAST.
Redundancy checks now use assignability checking.
Tooling 4
TypeScript 6 is now supported.
Support ESLint v10, allowing projects to use typescript-eslint with the new ESLint release.
CLI outputs now include tseslint.com redirects, providing updated links for developers using command-line tooling.
eslint-plugin now uses Intl.Segmenter instead of graphemer for text segmentation.
Fixes and other changes 118
Correctly parenthesizes constraints in optional tuple elements.
Avoids false positives when the rule is used without the typescript-eslint parser.
Ignores type-only references when determining after-used variables.
Applies a safe fix when an optional chain ends with a strict null comparison.
Matches linked packages and packages whose version is missing.
The rule no longer autofixes when the declared return type is unknown.
Argument checks are skipped for calls without arguments.
Counts instantiated mapped type templates when checking for unnecessary type parameters.
Identical types are skipped and deep type walks are bounded.
Partially exported merged declarations now report usedOnlyAsType correctly.
The rule now checks the constrained type.
TypeOrValueSpecifier now matches re-exports and global declarations.
Handles a return statement outside any function.
Generic assertion reports now use a specialized message.
Literal cases are now always sorted in stable order.
Respects this: void on class properties.
Removing await no longer produces autofixes that break code.
Bare any rest parameters now use unknown[] in the rule's handling.
Mapped types with unresolved keys are no longer reported.
Allows void on assignment expressions.
Handles multiple Promise constituents.
WeakMap spread suggestions are omitted.
Handles union-keyed index access on the left side of nullish assignment.
Accounts for parameter reassignment.
Avoids a false positive for empty objects asserted to Record type aliases.
Suggestion fixes now handle type precedence correctly.
Avoids false positives on tuples with rest elements.
Symlinked paths are resolved when matching files to projects.
Adds missing opening < tokens for type arguments.
Treats Intl.Collator.prototype.compare as bound by the specification.
Stops reporting fields that read fields declared before them.
Reports deprecated imported values used in object shorthand properties.
Removes a false positive on the right-hand side of a nested logical expression.
Clarifies the parserOptions.project error message, making configuration problems easier to understand.
Uses scope analysis instead of type checking for merged namespaces.
Compares type parameters by constraint instead of name.
Suggestions that create invalid interfaces or export defaults are now ignored.
Setting ignoreVoid to false no longer produces a false negative in arrow functions.
Recursive types no longer cause a stack overflow during analysis.
The autofix no longer breaks code in arrow functions.
Reports now deduplicate types in unified-signature diagnostics.
The rule now preserves type annotations and does not drop decorators.
The rule now ignores shadowed built-ins.
The rule now checks key remapping in mapped types.
The rule no longer reports defaults used by other overloads.
The rule now correctly handles calls to shadowed Boolean identifiers.
Stops flagging computed assignments that use a variable key.
Correctly handles escaped dollar signs at the end of regex literals.
Reports unbound methods accessed through member expressions on union types.
The rule now uses the array argument type constraint.
Suggests converting readonly function properties without emitting invalid syntax.
No longer flags a shadowed String() call.
Handles optional-chained calls to overloaded functions correctly.
The fixer now preserves the boolean result for nullable true comparisons.
Trailing binary operator cases now receive a suggestion instead of an automatic fix.
Autofixing no longer removes comments.
Fixes a precedence bug in the autofix.
Correctly respects ECMAScript line terminators.
Object literals at the left edge of expression statements are now parenthesized by the fixer.
Avoids false positives for template literal expressions.
The rule-schema-to-typescript-types tool now respects ECMAScript line terminators.
UnaryExpression.prefix is now always typed as true.
Correct the rule to match ESLint v10 handling.
Respect ECMAScript line terminators in ts-comment rules.
Fixed the playground TypeScript version selector so developers can select the intended TypeScript version.
Exports Compatible* types from typescript-eslint to resolve a pnpm TypeScript error.
Now throws the underlying error cause when retrieving a parsed configuration file from the TypeScript server.
Prevents a stack overflow when the rule processes recursive types.
Object destructuring values are now treated as declarations by the rule.
The rule no longer crashes when analyzing recursive template literal types.
The rule tester now declares TypeScript as a peer dependency.
Treats void as nullish when checking for unnecessary conditions.
Handles instantiation expressions correctly.
Avoids false positives in logical assignment assertions.
Fixes a crash caused by checker.getTypeArguments not being a function.
Preserves index signatures in undefined unions to avoid incorrect lint behavior.
Preserves phantom type arguments during generic inference.
Fixes a false negative when checking type predicate parameters.
The rule now handles index signatures.
Fixed a crash in the no-unnecessary-type-arguments rule.
The rule avoids fixing unknown RegExp flags.
Fixes false positives when unwrapping generic return values.
Skips false positives for unresolved type parameters.
Removes a dangling closing parenthesis from the rule's reported output.
Preserves type alias information when checking readonly parameter types.
The rule no longer reports properties on intersection types, reducing incorrect lint diagnostics.
For tagged template literals with invalid escapes, cooked is now null.
False positives for toString with overloads are fixed.
The rule is guarded against negative parameter indexes.
Statically analyzable computed keys are handled correctly.
False positives involving overloads are fixed.
Parser options are now taken from context.languageOptions, ensuring rules use the current language options.
Removing an entire import no longer leaves a trailing newline.
The rule now reports unnecessary defaults in ternary expressions.
Catch clause scope definitions now report the correct def.name value.
Utilities now handle environments where FlatESLint is missing.
Utilities now handle environments where LegacyESLint is missing.
The rule no longer incorrectly reports a private destructured class member as unused when it is used.
Scope analysis no longer misidentifies use strict directives.
The fixer now skips interfaces that are default exports, avoiding an incorrect automatic change.
RuleCreator no longer requires root defaultOptions, simplifying custom rule definitions.
The rule no longer reports a false positive for parameters corresponding to a rest parameter.
Syntax checking for using declarations is corrected.
The rule now correctly handles conditional initializers.
The rule no longer crashes or reports false positives in some cases.
The rule now fixes additional cases by using optional syntax.
The rule now handles MemberExpression in the final chain position.
The rule now ignores methods that return this.
The rule now correctly handles undefined versus void.
Checks the value flag before resolving an alias.
Ignored base types are now honored on generic classes.
The rule now ignores cases where the constructor is a typed array.
singleRun is now inferred as true for project service.
The rule no longer double-reports computed literal identifiers.
The fixer now handles functions with the override modifier correctly.
The rule now supports signed numbers when checking duplicate enum values.
The rule now expands union types to retrieve the target property.
The rule now skips optional chaining when applying it could change the result.