Skip to content

fix(eslint-plugin): [no-unnecessary-parameter-property-assignment] account for parameter reassignment - #12880

Merged
bradzacher merged 2 commits into
typescript-eslint:mainfrom
diptomistry:fix-12834-parameter-reassignment
Sep 15, 2026
Merged

bradzacher merged 2 commits into
typescript-eslint:mainfrom
diptomistry:fix-12834-parameter-reassignment

Conversation

@diptomistry

Copy link
Copy Markdown
Contributor

PR Checklist

Overview

Parameter properties initialize this.x with the original argument. If the constructor then reassigns the parameter and copies it again, that second assignment is not redundant:

constructor(public name: string) {
  name = name.trim();
  this.name = name; // needed — without it, `new User(' Alice ').name` stays `' Alice '` instead of `'Alice'`
}

The rule only looked at prior writes to this.x. A write to the parameter itself never counted, so this.name = name was still reported.

This PR records parameter assignments into the same assignedBeforeUnnecessary set, in source order (same CFG-blind approach as the existing this.foo += 1 inside if cases). Reassignment after this.x = x does not suppress the report, because that write does not change the value already stored on this.

This does not attempt to handle loops, where a write appearing after this.x = x in source order could still affect a later iteration. That would need iteration-aware analysis, which is out of scope here — this fix targets the exact case in the issue (a plain, non-loop constructor).

Regression tests cover trim / compound / if reassignment, two properties where only one is reassigned, reassignment after the copy, and the plain unnecessary case.

@typescript-eslint

Copy link
Copy Markdown
Contributor

Thanks for the PR, @diptomistry!

typescript-eslint is a 100% community driven project, and we are incredibly grateful that you are contributing to that community.

The core maintainers work on this in their personal time, so please understand that it may not be possible for them to review your work immediately.

Thanks again!


🙏 Please, if you or your company is finding typescript-eslint valuable, help us sustain the project by sponsoring it transparently on https://opencollective.com/typescript-eslint.

@netlify

netlify Bot commented Sep 15, 2026 •

Copy link
Copy Markdown

✅ Deploy Preview for typescript-eslint ready!

Name Link
🔨 Latest commit 38090a6
🔍 Latest deploy log https://app.netlify.com/projects/typescript-eslint/deploys/6aa8cd54828fa50008645d07
😎 Deploy Preview https://deploy-preview-12880--typescript-eslint.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.
Lighthouse
Lighthouse
1 paths audited
Performance: 98 (🔴 down 1 from production)
Accessibility: 97 (no change from production)
Best Practices: 100 (no change from production)
SEO: 90 (no change from production)
PWA: 80 (no change from production)
View the detailed breakdown and full score reports
🤖 Make changes Run an agent on this branch

To edit notification comments on pull requests, go to your Netlify project configuration.

@github-actions github-actions Bot added bug Something isn't working package: eslint-plugin Issues related to @typescript-eslint/eslint-plugin labels Sep 15, 2026
@nx-cloud

nx-cloud Bot commented Sep 15, 2026 •

Copy link
Copy Markdown

View your CI Pipeline Execution ↗ for commit 38090a6

Command Status Duration Result
nx run-many -t typecheck ✅ Succeeded 1m 5s View ↗
nx run-many -t lint --projects=typescript-estre... ✅ Succeeded 1m 5s View ↗
nx run-many -t lint --projects=eslint-plugin --... ✅ Succeeded 59s View ↗
nx run-many -t typecheck:tsgo ✅ Succeeded 42s View ↗
nx run-many -t lint --projects=ast-spec,utils,s... ✅ Succeeded 29s View ↗
nx run-many -t lint --projects=parser,type-util... ✅ Succeeded 25s View ↗
nx run integration-tests:test ✅ Succeeded 4s View ↗
nx run types:build ✅ Succeeded 1s View ↗
Additional runs (16) ✅ Succeeded ... View ↗

☁️ Nx Cloud last updated this comment at 2026-09-15 04:49:32 UTC

@codecov

codecov Bot commented Sep 15, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 94.99%. Comparing base (4a742ff) to head (38090a6).
⚠️ Report is 1 commits behind head on main.

Additional details and impacted files
@@           Coverage Diff           @@
##             main   #12880   +/-   ##
=======================================
  Coverage   94.98%   94.99%           
=======================================
  Files         229      229           
  Lines       11634    11638    +4     
  Branches     3867     3869    +2     
=======================================
+ Hits        11051    11055    +4     
  Misses        251      251           
  Partials      332      332           
Flag Coverage Δ
unittest 94.99% <100.00%> (+<0.01%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

Files with missing lines Coverage Δ
...es/no-unnecessary-parameter-property-assignment.ts 97.29% <100.00%> (+0.15%) ⬆️
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@bradzacher bradzacher left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@bradzacher
bradzacher merged commit da394bc into typescript-eslint:main Sep 15, 2026
42 of 43 checks passed
@github-actions github-actions Bot added the 1 approval >=1 team member has approved this PR; we're now leaving it open for more reviews before we merge label Sep 15, 2026
graphite-app Bot pushed a commit to oxc-project/oxc that referenced this pull request Sep 23, 2026
…account for parameter property reassignment (#26955)

Ports typescript-eslint/typescript-eslint#12880. After `name = name.trim()`, copying the reassigned parameter with `this.name = name` is necessary; Oxlint previously reported it and suggested removing it.

Track writes to the constructor parameter binding in source order, including nested assignments and arrow IIFEs. Later writes and writes to unrelated or shadowed bindings do not suppress reports. Includes all upstream regression cases and checks Oxc's removal suggestions.
graphite-app Bot pushed a commit to oxc-project/oxc that referenced this pull request Sep 28, 2026
…account for parameter property reassignment (#26955)

Ports typescript-eslint/typescript-eslint#12880. After `name = name.trim()`, copying the reassigned parameter with `this.name = name` is necessary; Oxlint previously reported it and suggested removing it.

Track writes to the constructor parameter binding in source order, including nested assignments and arrow IIFEs. Later writes and writes to unrelated or shadowed bindings do not suppress reports. Includes all upstream regression cases and checks Oxc's removal suggestions.
renovate Bot added a commit to andrei-picus-tink/auto-renovate that referenced this pull request Oct 2, 2026
| datasource | package                          | from   | to     |
| ---------- | -------------------------------- | ------ | ------ |
| npm        | @typescript-eslint/eslint-plugin | 8.69.0 | 8.71.0 |
| npm        | @typescript-eslint/parser        | 8.69.0 | 8.71.0 |


## [v8.71.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8710-2026-09-28)

##### 🚀 Features

- **eslint-plugin:** \[no-unsafe-enum-assignment] add rule ([#12732](typescript-eslint/typescript-eslint#12732))

##### 🩹 Fixes

- **eslint-plugin:** \[no-misused-promises] handle a return outside of any function ([#12912](typescript-eslint/typescript-eslint#12912))
- **eslint-plugin:** \[no-unnecessary-type-assertion] specialize generic assertion report message ([#12832](typescript-eslint/typescript-eslint#12832))
- **eslint-plugin:** \[unbound-method] respect `this: void` on class properties ([7fce9127d](typescript-eslint/typescript-eslint@7fce9127d))
- **eslint-plugin:** \[switch-exhaustiveness-check] always sort literal cases in stable order ([#12885](typescript-eslint/typescript-eslint#12885))

##### ❤️ Thank You

- Evyatar Daud [@StyleShit](https://github.com/StyleShit)
- Fatih Çakır [@wfatih](https://github.com/wfatih)
- Josh Goldberg
- Josh Goldberg ✨
- Zamiell [@Zamiell](https://github.com/Zamiell)

See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.71.0) for more information.

You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.


## [v8.70.1](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8701-2026-09-21)

##### 🩹 Fixes

- **eslint-plugin:** \[no-misused-promises] handle multiple Promise constituents ([#12904](typescript-eslint/typescript-eslint#12904))
- **eslint-plugin:** \[no-useless-default-assignment] convert the fixer to a suggestion fixer ([#12826](typescript-eslint/typescript-eslint#12826))
- **eslint-plugin:** \[no-unnecessary-condition] handle union-keyed index access on the left-hand side of nullish assignment ([#12747](typescript-eslint/typescript-eslint#12747))
- **eslint-plugin:** \[unbound-method] treat Intl.Collator.prototype.compare as spec-bound ([#12845](typescript-eslint/typescript-eslint#12845))
- **eslint-plugin:** \[no-unnecessary-parameter-property-assignment] account for parameter reassignment ([#12880](typescript-eslint/typescript-eslint#12880))
- **eslint-plugin:** \[await-thenable] prevent autofix from breaking code when removing `await` ([#12716](typescript-eslint/typescript-eslint#12716))
- **eslint-plugin:** \[no-meaningless-void-operator] allow void on assignment expressions ([#12873](typescript-eslint/typescript-eslint#12873))
- **eslint-plugin:** \[no-unnecessary-type-assertion] false positive for empty object asserted to a type alias of Record ([#12869](typescript-eslint/typescript-eslint#12869))
- **eslint-plugin:** \[no-misused-spread] omit WeakMap spread suggestions ([#12850](typescript-eslint/typescript-eslint#12850))
- **eslint-plugin:** \[no-generated-empty-object-type] don't report a mapped type whose keys are not resolved yet ([#12854](typescript-eslint/typescript-eslint#12854))
- **eslint-plugin:** \[no-explicit-any] use unknown\[] for bare any rest parameters ([#12818](typescript-eslint/typescript-eslint#12818))
- **eslint-plugin:** \[no-unnecessary-type-parameters] handle type precedence in the suggestion fixer ([#12637](typescript-eslint/typescript-eslint#12637))
- **eslint-plugin:** \[no-useless-default-assignment] avoid false positives on tuples with a rest element ([#12768](typescript-eslint/typescript-eslint#12768))

##### ❤️ Thank You

- Brad Zacher [@bradzacher](https://github.com/bradzacher)
- Diptajoy Mistry [@diptomistry](https://github.com/diptomistry)
- Grit [@Grit03](https://github.com/Grit03)
- Hugo [@hugop95](https://github.com/hugop95)
- Michael Naumov [@mnaoumov](https://github.com/mnaoumov)
- Mikhail Baev [@baevm](https://github.com/baevm)
- Om Rawat
- Sanath [@sansynx](https://github.com/sansynx)
- Shinji
- Vinccool96
- 김채영 [@cchaeyoung](https://github.com/cchaeyoung)
- 송재욱

See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.70.1) for more information.

You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.


## [v8.70.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8700-2026-09-07)

##### 🚀 Features

- **eslint-plugin:** \[no-generated-empty-object-type] add rule ([#12730](typescript-eslint/typescript-eslint#12730))

##### 🩹 Fixes

- **eslint-plugin:** \[no-deprecated] report deprecated imported values used in object shorthand properties ([#12780](typescript-eslint/typescript-eslint#12780))
- **eslint-plugin:** \[no-unnecessary-condition] no false positive on RHS of a nested logical expression ([#12728](typescript-eslint/typescript-eslint#12728))
- **eslint-plugin:** \[member-ordering] don't report fields that read fields declared before them ([#12729](typescript-eslint/typescript-eslint#12729))

##### ❤️ Thank You

- Josh Goldberg ✨ [@JoshuaKGoldberg](https://github.com/JoshuaKGoldberg)
- Ulrich Stark [@ulrichstark](https://github.com/ulrichstark)

See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.70.0) for more information.

You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.
renovate Bot added a commit to andrei-picus-tink/auto-renovate that referenced this pull request Oct 2, 2026
| datasource | package                          | from   | to     |
| ---------- | -------------------------------- | ------ | ------ |
| npm        | @typescript-eslint/eslint-plugin | 8.69.0 | 8.71.0 |
| npm        | @typescript-eslint/parser        | 8.69.0 | 8.71.0 |


## [v8.71.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8710-2026-09-28)

##### 🚀 Features

- **eslint-plugin:** \[no-unsafe-enum-assignment] add rule ([#12732](typescript-eslint/typescript-eslint#12732))

##### 🩹 Fixes

- **eslint-plugin:** \[no-misused-promises] handle a return outside of any function ([#12912](typescript-eslint/typescript-eslint#12912))
- **eslint-plugin:** \[no-unnecessary-type-assertion] specialize generic assertion report message ([#12832](typescript-eslint/typescript-eslint#12832))
- **eslint-plugin:** \[unbound-method] respect `this: void` on class properties ([7fce9127d](typescript-eslint/typescript-eslint@7fce9127d))
- **eslint-plugin:** \[switch-exhaustiveness-check] always sort literal cases in stable order ([#12885](typescript-eslint/typescript-eslint#12885))

##### ❤️ Thank You

- Evyatar Daud [@StyleShit](https://github.com/StyleShit)
- Fatih Çakır [@wfatih](https://github.com/wfatih)
- Josh Goldberg
- Josh Goldberg ✨
- Zamiell [@Zamiell](https://github.com/Zamiell)

See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.71.0) for more information.

You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.


## [v8.70.1](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8701-2026-09-21)

##### 🩹 Fixes

- **eslint-plugin:** \[no-misused-promises] handle multiple Promise constituents ([#12904](typescript-eslint/typescript-eslint#12904))
- **eslint-plugin:** \[no-useless-default-assignment] convert the fixer to a suggestion fixer ([#12826](typescript-eslint/typescript-eslint#12826))
- **eslint-plugin:** \[no-unnecessary-condition] handle union-keyed index access on the left-hand side of nullish assignment ([#12747](typescript-eslint/typescript-eslint#12747))
- **eslint-plugin:** \[unbound-method] treat Intl.Collator.prototype.compare as spec-bound ([#12845](typescript-eslint/typescript-eslint#12845))
- **eslint-plugin:** \[no-unnecessary-parameter-property-assignment] account for parameter reassignment ([#12880](typescript-eslint/typescript-eslint#12880))
- **eslint-plugin:** \[await-thenable] prevent autofix from breaking code when removing `await` ([#12716](typescript-eslint/typescript-eslint#12716))
- **eslint-plugin:** \[no-meaningless-void-operator] allow void on assignment expressions ([#12873](typescript-eslint/typescript-eslint#12873))
- **eslint-plugin:** \[no-unnecessary-type-assertion] false positive for empty object asserted to a type alias of Record ([#12869](typescript-eslint/typescript-eslint#12869))
- **eslint-plugin:** \[no-misused-spread] omit WeakMap spread suggestions ([#12850](typescript-eslint/typescript-eslint#12850))
- **eslint-plugin:** \[no-generated-empty-object-type] don't report a mapped type whose keys are not resolved yet ([#12854](typescript-eslint/typescript-eslint#12854))
- **eslint-plugin:** \[no-explicit-any] use unknown\[] for bare any rest parameters ([#12818](typescript-eslint/typescript-eslint#12818))
- **eslint-plugin:** \[no-unnecessary-type-parameters] handle type precedence in the suggestion fixer ([#12637](typescript-eslint/typescript-eslint#12637))
- **eslint-plugin:** \[no-useless-default-assignment] avoid false positives on tuples with a rest element ([#12768](typescript-eslint/typescript-eslint#12768))

##### ❤️ Thank You

- Brad Zacher [@bradzacher](https://github.com/bradzacher)
- Diptajoy Mistry [@diptomistry](https://github.com/diptomistry)
- Grit [@Grit03](https://github.com/Grit03)
- Hugo [@hugop95](https://github.com/hugop95)
- Michael Naumov [@mnaoumov](https://github.com/mnaoumov)
- Mikhail Baev [@baevm](https://github.com/baevm)
- Om Rawat
- Sanath [@sansynx](https://github.com/sansynx)
- Shinji
- Vinccool96
- 김채영 [@cchaeyoung](https://github.com/cchaeyoung)
- 송재욱

See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.70.1) for more information.

You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.


## [v8.70.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8700-2026-09-07)

##### 🚀 Features

- **eslint-plugin:** \[no-generated-empty-object-type] add rule ([#12730](typescript-eslint/typescript-eslint#12730))

##### 🩹 Fixes

- **eslint-plugin:** \[no-deprecated] report deprecated imported values used in object shorthand properties ([#12780](typescript-eslint/typescript-eslint#12780))
- **eslint-plugin:** \[no-unnecessary-condition] no false positive on RHS of a nested logical expression ([#12728](typescript-eslint/typescript-eslint#12728))
- **eslint-plugin:** \[member-ordering] don't report fields that read fields declared before them ([#12729](typescript-eslint/typescript-eslint#12729))

##### ❤️ Thank You

- Josh Goldberg ✨ [@JoshuaKGoldberg](https://github.com/JoshuaKGoldberg)
- Ulrich Stark [@ulrichstark](https://github.com/ulrichstark)

See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.70.0) for more information.

You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.
renovate Bot added a commit to andrei-picus-tink/auto-renovate that referenced this pull request Oct 3, 2026
| datasource | package                          | from   | to     |
| ---------- | -------------------------------- | ------ | ------ |
| npm        | @typescript-eslint/eslint-plugin | 8.69.0 | 8.71.0 |
| npm        | @typescript-eslint/parser        | 8.69.0 | 8.71.0 |


## [v8.71.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8710-2026-09-28)

##### 🚀 Features

- **eslint-plugin:** \[no-unsafe-enum-assignment] add rule ([#12732](typescript-eslint/typescript-eslint#12732))

##### 🩹 Fixes

- **eslint-plugin:** \[no-misused-promises] handle a return outside of any function ([#12912](typescript-eslint/typescript-eslint#12912))
- **eslint-plugin:** \[no-unnecessary-type-assertion] specialize generic assertion report message ([#12832](typescript-eslint/typescript-eslint#12832))
- **eslint-plugin:** \[unbound-method] respect `this: void` on class properties ([7fce9127d](typescript-eslint/typescript-eslint@7fce9127d))
- **eslint-plugin:** \[switch-exhaustiveness-check] always sort literal cases in stable order ([#12885](typescript-eslint/typescript-eslint#12885))

##### ❤️ Thank You

- Evyatar Daud [@StyleShit](https://github.com/StyleShit)
- Fatih Çakır [@wfatih](https://github.com/wfatih)
- Josh Goldberg
- Josh Goldberg ✨
- Zamiell [@Zamiell](https://github.com/Zamiell)

See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.71.0) for more information.

You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.


## [v8.70.1](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8701-2026-09-21)

##### 🩹 Fixes

- **eslint-plugin:** \[no-misused-promises] handle multiple Promise constituents ([#12904](typescript-eslint/typescript-eslint#12904))
- **eslint-plugin:** \[no-useless-default-assignment] convert the fixer to a suggestion fixer ([#12826](typescript-eslint/typescript-eslint#12826))
- **eslint-plugin:** \[no-unnecessary-condition] handle union-keyed index access on the left-hand side of nullish assignment ([#12747](typescript-eslint/typescript-eslint#12747))
- **eslint-plugin:** \[unbound-method] treat Intl.Collator.prototype.compare as spec-bound ([#12845](typescript-eslint/typescript-eslint#12845))
- **eslint-plugin:** \[no-unnecessary-parameter-property-assignment] account for parameter reassignment ([#12880](typescript-eslint/typescript-eslint#12880))
- **eslint-plugin:** \[await-thenable] prevent autofix from breaking code when removing `await` ([#12716](typescript-eslint/typescript-eslint#12716))
- **eslint-plugin:** \[no-meaningless-void-operator] allow void on assignment expressions ([#12873](typescript-eslint/typescript-eslint#12873))
- **eslint-plugin:** \[no-unnecessary-type-assertion] false positive for empty object asserted to a type alias of Record ([#12869](typescript-eslint/typescript-eslint#12869))
- **eslint-plugin:** \[no-misused-spread] omit WeakMap spread suggestions ([#12850](typescript-eslint/typescript-eslint#12850))
- **eslint-plugin:** \[no-generated-empty-object-type] don't report a mapped type whose keys are not resolved yet ([#12854](typescript-eslint/typescript-eslint#12854))
- **eslint-plugin:** \[no-explicit-any] use unknown\[] for bare any rest parameters ([#12818](typescript-eslint/typescript-eslint#12818))
- **eslint-plugin:** \[no-unnecessary-type-parameters] handle type precedence in the suggestion fixer ([#12637](typescript-eslint/typescript-eslint#12637))
- **eslint-plugin:** \[no-useless-default-assignment] avoid false positives on tuples with a rest element ([#12768](typescript-eslint/typescript-eslint#12768))

##### ❤️ Thank You

- Brad Zacher [@bradzacher](https://github.com/bradzacher)
- Diptajoy Mistry [@diptomistry](https://github.com/diptomistry)
- Grit [@Grit03](https://github.com/Grit03)
- Hugo [@hugop95](https://github.com/hugop95)
- Michael Naumov [@mnaoumov](https://github.com/mnaoumov)
- Mikhail Baev [@baevm](https://github.com/baevm)
- Om Rawat
- Sanath [@sansynx](https://github.com/sansynx)
- Shinji
- Vinccool96
- 김채영 [@cchaeyoung](https://github.com/cchaeyoung)
- 송재욱

See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.70.1) for more information.

You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.


## [v8.70.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8700-2026-09-07)

##### 🚀 Features

- **eslint-plugin:** \[no-generated-empty-object-type] add rule ([#12730](typescript-eslint/typescript-eslint#12730))

##### 🩹 Fixes

- **eslint-plugin:** \[no-deprecated] report deprecated imported values used in object shorthand properties ([#12780](typescript-eslint/typescript-eslint#12780))
- **eslint-plugin:** \[no-unnecessary-condition] no false positive on RHS of a nested logical expression ([#12728](typescript-eslint/typescript-eslint#12728))
- **eslint-plugin:** \[member-ordering] don't report fields that read fields declared before them ([#12729](typescript-eslint/typescript-eslint#12729))

##### ❤️ Thank You

- Josh Goldberg ✨ [@JoshuaKGoldberg](https://github.com/JoshuaKGoldberg)
- Ulrich Stark [@ulrichstark](https://github.com/ulrichstark)

See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.70.0) for more information.

You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.
renovate Bot added a commit to andrei-picus-tink/auto-renovate that referenced this pull request Oct 4, 2026
| datasource | package                          | from   | to     |
| ---------- | -------------------------------- | ------ | ------ |
| npm        | @typescript-eslint/eslint-plugin | 8.69.0 | 8.71.0 |
| npm        | @typescript-eslint/parser        | 8.69.0 | 8.71.0 |


## [v8.71.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8710-2026-09-28)

##### 🚀 Features

- **eslint-plugin:** \[no-unsafe-enum-assignment] add rule ([#12732](typescript-eslint/typescript-eslint#12732))

##### 🩹 Fixes

- **eslint-plugin:** \[no-misused-promises] handle a return outside of any function ([#12912](typescript-eslint/typescript-eslint#12912))
- **eslint-plugin:** \[no-unnecessary-type-assertion] specialize generic assertion report message ([#12832](typescript-eslint/typescript-eslint#12832))
- **eslint-plugin:** \[unbound-method] respect `this: void` on class properties ([7fce9127d](typescript-eslint/typescript-eslint@7fce9127d))
- **eslint-plugin:** \[switch-exhaustiveness-check] always sort literal cases in stable order ([#12885](typescript-eslint/typescript-eslint#12885))

##### ❤️ Thank You

- Evyatar Daud [@StyleShit](https://github.com/StyleShit)
- Fatih Çakır [@wfatih](https://github.com/wfatih)
- Josh Goldberg
- Josh Goldberg ✨
- Zamiell [@Zamiell](https://github.com/Zamiell)

See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.71.0) for more information.

You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.


## [v8.70.1](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8701-2026-09-21)

##### 🩹 Fixes

- **eslint-plugin:** \[no-misused-promises] handle multiple Promise constituents ([#12904](typescript-eslint/typescript-eslint#12904))
- **eslint-plugin:** \[no-useless-default-assignment] convert the fixer to a suggestion fixer ([#12826](typescript-eslint/typescript-eslint#12826))
- **eslint-plugin:** \[no-unnecessary-condition] handle union-keyed index access on the left-hand side of nullish assignment ([#12747](typescript-eslint/typescript-eslint#12747))
- **eslint-plugin:** \[unbound-method] treat Intl.Collator.prototype.compare as spec-bound ([#12845](typescript-eslint/typescript-eslint#12845))
- **eslint-plugin:** \[no-unnecessary-parameter-property-assignment] account for parameter reassignment ([#12880](typescript-eslint/typescript-eslint#12880))
- **eslint-plugin:** \[await-thenable] prevent autofix from breaking code when removing `await` ([#12716](typescript-eslint/typescript-eslint#12716))
- **eslint-plugin:** \[no-meaningless-void-operator] allow void on assignment expressions ([#12873](typescript-eslint/typescript-eslint#12873))
- **eslint-plugin:** \[no-unnecessary-type-assertion] false positive for empty object asserted to a type alias of Record ([#12869](typescript-eslint/typescript-eslint#12869))
- **eslint-plugin:** \[no-misused-spread] omit WeakMap spread suggestions ([#12850](typescript-eslint/typescript-eslint#12850))
- **eslint-plugin:** \[no-generated-empty-object-type] don't report a mapped type whose keys are not resolved yet ([#12854](typescript-eslint/typescript-eslint#12854))
- **eslint-plugin:** \[no-explicit-any] use unknown\[] for bare any rest parameters ([#12818](typescript-eslint/typescript-eslint#12818))
- **eslint-plugin:** \[no-unnecessary-type-parameters] handle type precedence in the suggestion fixer ([#12637](typescript-eslint/typescript-eslint#12637))
- **eslint-plugin:** \[no-useless-default-assignment] avoid false positives on tuples with a rest element ([#12768](typescript-eslint/typescript-eslint#12768))

##### ❤️ Thank You

- Brad Zacher [@bradzacher](https://github.com/bradzacher)
- Diptajoy Mistry [@diptomistry](https://github.com/diptomistry)
- Grit [@Grit03](https://github.com/Grit03)
- Hugo [@hugop95](https://github.com/hugop95)
- Michael Naumov [@mnaoumov](https://github.com/mnaoumov)
- Mikhail Baev [@baevm](https://github.com/baevm)
- Om Rawat
- Sanath [@sansynx](https://github.com/sansynx)
- Shinji
- Vinccool96
- 김채영 [@cchaeyoung](https://github.com/cchaeyoung)
- 송재욱

See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.70.1) for more information.

You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.


## [v8.70.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8700-2026-09-07)

##### 🚀 Features

- **eslint-plugin:** \[no-generated-empty-object-type] add rule ([#12730](typescript-eslint/typescript-eslint#12730))

##### 🩹 Fixes

- **eslint-plugin:** \[no-deprecated] report deprecated imported values used in object shorthand properties ([#12780](typescript-eslint/typescript-eslint#12780))
- **eslint-plugin:** \[no-unnecessary-condition] no false positive on RHS of a nested logical expression ([#12728](typescript-eslint/typescript-eslint#12728))
- **eslint-plugin:** \[member-ordering] don't report fields that read fields declared before them ([#12729](typescript-eslint/typescript-eslint#12729))

##### ❤️ Thank You

- Josh Goldberg ✨ [@JoshuaKGoldberg](https://github.com/JoshuaKGoldberg)
- Ulrich Stark [@ulrichstark](https://github.com/ulrichstark)

See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.70.0) for more information.

You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.
renovate Bot added a commit to andrei-picus-tink/auto-renovate that referenced this pull request Oct 6, 2026
| datasource | package                          | from   | to     |
| ---------- | -------------------------------- | ------ | ------ |
| npm        | @typescript-eslint/eslint-plugin | 8.69.0 | 8.71.1 |
| npm        | @typescript-eslint/parser        | 8.69.0 | 8.71.1 |


## [v8.71.1](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8711-2026-10-05)

##### 🩹 Fixes

- **eslint-plugin:** \[no-unnecessary-type-parameters] count instantiated mapped type constraints ([#12941](typescript-eslint/typescript-eslint#12941))
- **eslint-plugin:** \[prefer-optional-chain] check the constrained type ([#12953](typescript-eslint/typescript-eslint#12953))
- **eslint-plugin:** \[no-confusing-void-expression] don't autofix when declared return type is unknown ([#12930](typescript-eslint/typescript-eslint#12930))
- **eslint-plugin:** \[no-unsafe-enum-assignment] skip identical types and bound deep type walks ([#12957](typescript-eslint/typescript-eslint#12957))
- **eslint-plugin:** \[require-array-sort-compare] use array argument type constraint ([#12919](typescript-eslint/typescript-eslint#12919))
- **eslint-plugin:** \[no-unused-vars] report usedOnlyAsType for partially exported merged declarations ([#12892](typescript-eslint/typescript-eslint#12892))
- **eslint-plugin:** \[no-misused-promises] skip argument checks for calls without arguments ([#12923](typescript-eslint/typescript-eslint#12923))

##### ❤️ Thank You

- Diptajoy Mistry [@diptomistry](https://github.com/diptomistry)
- Evyatar Daud [@StyleShit](https://github.com/StyleShit)
- Josh Goldberg
- Josh Goldberg ✨
- Medhansh Poojari

See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.71.1) for more information.

You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.


## [v8.71.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8710-2026-09-28)

##### 🚀 Features

- **eslint-plugin:** \[no-unsafe-enum-assignment] add rule ([#12732](typescript-eslint/typescript-eslint#12732))

##### 🩹 Fixes

- **eslint-plugin:** \[no-misused-promises] handle a return outside of any function ([#12912](typescript-eslint/typescript-eslint#12912))
- **eslint-plugin:** \[no-unnecessary-type-assertion] specialize generic assertion report message ([#12832](typescript-eslint/typescript-eslint#12832))
- **eslint-plugin:** \[unbound-method] respect `this: void` on class properties ([7fce9127d](typescript-eslint/typescript-eslint@7fce9127d))
- **eslint-plugin:** \[switch-exhaustiveness-check] always sort literal cases in stable order ([#12885](typescript-eslint/typescript-eslint#12885))

##### ❤️ Thank You

- Evyatar Daud [@StyleShit](https://github.com/StyleShit)
- Fatih Çakır [@wfatih](https://github.com/wfatih)
- Josh Goldberg
- Josh Goldberg ✨
- Zamiell [@Zamiell](https://github.com/Zamiell)

See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.71.0) for more information.

You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.


## [v8.70.1](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8701-2026-09-21)

##### 🩹 Fixes

- **eslint-plugin:** \[no-misused-promises] handle multiple Promise constituents ([#12904](typescript-eslint/typescript-eslint#12904))
- **eslint-plugin:** \[no-useless-default-assignment] convert the fixer to a suggestion fixer ([#12826](typescript-eslint/typescript-eslint#12826))
- **eslint-plugin:** \[no-unnecessary-condition] handle union-keyed index access on the left-hand side of nullish assignment ([#12747](typescript-eslint/typescript-eslint#12747))
- **eslint-plugin:** \[unbound-method] treat Intl.Collator.prototype.compare as spec-bound ([#12845](typescript-eslint/typescript-eslint#12845))
- **eslint-plugin:** \[no-unnecessary-parameter-property-assignment] account for parameter reassignment ([#12880](typescript-eslint/typescript-eslint#12880))
- **eslint-plugin:** \[await-thenable] prevent autofix from breaking code when removing `await` ([#12716](typescript-eslint/typescript-eslint#12716))
- **eslint-plugin:** \[no-meaningless-void-operator] allow void on assignment expressions ([#12873](typescript-eslint/typescript-eslint#12873))
- **eslint-plugin:** \[no-unnecessary-type-assertion] false positive for empty object asserted to a type alias of Record ([#12869](typescript-eslint/typescript-eslint#12869))
- **eslint-plugin:** \[no-misused-spread] omit WeakMap spread suggestions ([#12850](typescript-eslint/typescript-eslint#12850))
- **eslint-plugin:** \[no-generated-empty-object-type] don't report a mapped type whose keys are not resolved yet ([#12854](typescript-eslint/typescript-eslint#12854))
- **eslint-plugin:** \[no-explicit-any] use unknown\[] for bare any rest parameters ([#12818](typescript-eslint/typescript-eslint#12818))
- **eslint-plugin:** \[no-unnecessary-type-parameters] handle type precedence in the suggestion fixer ([#12637](typescript-eslint/typescript-eslint#12637))
- **eslint-plugin:** \[no-useless-default-assignment] avoid false positives on tuples with a rest element ([#12768](typescript-eslint/typescript-eslint#12768))

##### ❤️ Thank You

- Brad Zacher [@bradzacher](https://github.com/bradzacher)
- Diptajoy Mistry [@diptomistry](https://github.com/diptomistry)
- Grit [@Grit03](https://github.com/Grit03)
- Hugo [@hugop95](https://github.com/hugop95)
- Michael Naumov [@mnaoumov](https://github.com/mnaoumov)
- Mikhail Baev [@baevm](https://github.com/baevm)
- Om Rawat
- Sanath [@sansynx](https://github.com/sansynx)
- Shinji
- Vinccool96
- 김채영 [@cchaeyoung](https://github.com/cchaeyoung)
- 송재욱

See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.70.1) for more information.

You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.


## [v8.70.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8700-2026-09-07)

##### 🚀 Features

- **eslint-plugin:** \[no-generated-empty-object-type] add rule ([#12730](typescript-eslint/typescript-eslint#12730))

##### 🩹 Fixes

- **eslint-plugin:** \[no-deprecated] report deprecated imported values used in object shorthand properties ([#12780](typescript-eslint/typescript-eslint#12780))
- **eslint-plugin:** \[no-unnecessary-condition] no false positive on RHS of a nested logical expression ([#12728](typescript-eslint/typescript-eslint#12728))
- **eslint-plugin:** \[member-ordering] don't report fields that read fields declared before them ([#12729](typescript-eslint/typescript-eslint#12729))

##### ❤️ Thank You

- Josh Goldberg ✨ [@JoshuaKGoldberg](https://github.com/JoshuaKGoldberg)
- Ulrich Stark [@ulrichstark](https://github.com/ulrichstark)

See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.70.0) for more information.

You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.
renovate Bot added a commit to andrei-picus-tink/auto-renovate that referenced this pull request Oct 6, 2026
| datasource | package                          | from   | to     |
| ---------- | -------------------------------- | ------ | ------ |
| npm        | @typescript-eslint/eslint-plugin | 8.69.0 | 8.71.1 |
| npm        | @typescript-eslint/parser        | 8.69.0 | 8.71.1 |


## [v8.71.1](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8711-2026-10-05)

##### 🩹 Fixes

- **eslint-plugin:** \[no-unnecessary-type-parameters] count instantiated mapped type constraints ([#12941](typescript-eslint/typescript-eslint#12941))
- **eslint-plugin:** \[prefer-optional-chain] check the constrained type ([#12953](typescript-eslint/typescript-eslint#12953))
- **eslint-plugin:** \[no-confusing-void-expression] don't autofix when declared return type is unknown ([#12930](typescript-eslint/typescript-eslint#12930))
- **eslint-plugin:** \[no-unsafe-enum-assignment] skip identical types and bound deep type walks ([#12957](typescript-eslint/typescript-eslint#12957))
- **eslint-plugin:** \[require-array-sort-compare] use array argument type constraint ([#12919](typescript-eslint/typescript-eslint#12919))
- **eslint-plugin:** \[no-unused-vars] report usedOnlyAsType for partially exported merged declarations ([#12892](typescript-eslint/typescript-eslint#12892))
- **eslint-plugin:** \[no-misused-promises] skip argument checks for calls without arguments ([#12923](typescript-eslint/typescript-eslint#12923))

##### ❤️ Thank You

- Diptajoy Mistry [@diptomistry](https://github.com/diptomistry)
- Evyatar Daud [@StyleShit](https://github.com/StyleShit)
- Josh Goldberg
- Josh Goldberg ✨
- Medhansh Poojari

See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.71.1) for more information.

You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.


## [v8.71.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8710-2026-09-28)

##### 🚀 Features

- **eslint-plugin:** \[no-unsafe-enum-assignment] add rule ([#12732](typescript-eslint/typescript-eslint#12732))

##### 🩹 Fixes

- **eslint-plugin:** \[no-misused-promises] handle a return outside of any function ([#12912](typescript-eslint/typescript-eslint#12912))
- **eslint-plugin:** \[no-unnecessary-type-assertion] specialize generic assertion report message ([#12832](typescript-eslint/typescript-eslint#12832))
- **eslint-plugin:** \[unbound-method] respect `this: void` on class properties ([7fce9127d](typescript-eslint/typescript-eslint@7fce9127d))
- **eslint-plugin:** \[switch-exhaustiveness-check] always sort literal cases in stable order ([#12885](typescript-eslint/typescript-eslint#12885))

##### ❤️ Thank You

- Evyatar Daud [@StyleShit](https://github.com/StyleShit)
- Fatih Çakır [@wfatih](https://github.com/wfatih)
- Josh Goldberg
- Josh Goldberg ✨
- Zamiell [@Zamiell](https://github.com/Zamiell)

See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.71.0) for more information.

You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.


## [v8.70.1](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8701-2026-09-21)

##### 🩹 Fixes

- **eslint-plugin:** \[no-misused-promises] handle multiple Promise constituents ([#12904](typescript-eslint/typescript-eslint#12904))
- **eslint-plugin:** \[no-useless-default-assignment] convert the fixer to a suggestion fixer ([#12826](typescript-eslint/typescript-eslint#12826))
- **eslint-plugin:** \[no-unnecessary-condition] handle union-keyed index access on the left-hand side of nullish assignment ([#12747](typescript-eslint/typescript-eslint#12747))
- **eslint-plugin:** \[unbound-method] treat Intl.Collator.prototype.compare as spec-bound ([#12845](typescript-eslint/typescript-eslint#12845))
- **eslint-plugin:** \[no-unnecessary-parameter-property-assignment] account for parameter reassignment ([#12880](typescript-eslint/typescript-eslint#12880))
- **eslint-plugin:** \[await-thenable] prevent autofix from breaking code when removing `await` ([#12716](typescript-eslint/typescript-eslint#12716))
- **eslint-plugin:** \[no-meaningless-void-operator] allow void on assignment expressions ([#12873](typescript-eslint/typescript-eslint#12873))
- **eslint-plugin:** \[no-unnecessary-type-assertion] false positive for empty object asserted to a type alias of Record ([#12869](typescript-eslint/typescript-eslint#12869))
- **eslint-plugin:** \[no-misused-spread] omit WeakMap spread suggestions ([#12850](typescript-eslint/typescript-eslint#12850))
- **eslint-plugin:** \[no-generated-empty-object-type] don't report a mapped type whose keys are not resolved yet ([#12854](typescript-eslint/typescript-eslint#12854))
- **eslint-plugin:** \[no-explicit-any] use unknown\[] for bare any rest parameters ([#12818](typescript-eslint/typescript-eslint#12818))
- **eslint-plugin:** \[no-unnecessary-type-parameters] handle type precedence in the suggestion fixer ([#12637](typescript-eslint/typescript-eslint#12637))
- **eslint-plugin:** \[no-useless-default-assignment] avoid false positives on tuples with a rest element ([#12768](typescript-eslint/typescript-eslint#12768))

##### ❤️ Thank You

- Brad Zacher [@bradzacher](https://github.com/bradzacher)
- Diptajoy Mistry [@diptomistry](https://github.com/diptomistry)
- Grit [@Grit03](https://github.com/Grit03)
- Hugo [@hugop95](https://github.com/hugop95)
- Michael Naumov [@mnaoumov](https://github.com/mnaoumov)
- Mikhail Baev [@baevm](https://github.com/baevm)
- Om Rawat
- Sanath [@sansynx](https://github.com/sansynx)
- Shinji
- Vinccool96
- 김채영 [@cchaeyoung](https://github.com/cchaeyoung)
- 송재욱

See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.70.1) for more information.

You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.


## [v8.70.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8700-2026-09-07)

##### 🚀 Features

- **eslint-plugin:** \[no-generated-empty-object-type] add rule ([#12730](typescript-eslint/typescript-eslint#12730))

##### 🩹 Fixes

- **eslint-plugin:** \[no-deprecated] report deprecated imported values used in object shorthand properties ([#12780](typescript-eslint/typescript-eslint#12780))
- **eslint-plugin:** \[no-unnecessary-condition] no false positive on RHS of a nested logical expression ([#12728](typescript-eslint/typescript-eslint#12728))
- **eslint-plugin:** \[member-ordering] don't report fields that read fields declared before them ([#12729](typescript-eslint/typescript-eslint#12729))

##### ❤️ Thank You

- Josh Goldberg ✨ [@JoshuaKGoldberg](https://github.com/JoshuaKGoldberg)
- Ulrich Stark [@ulrichstark](https://github.com/ulrichstark)

See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.70.0) for more information.

You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.
renovate Bot added a commit to andrei-picus-tink/auto-renovate that referenced this pull request Oct 9, 2026
| datasource | package                          | from   | to     |
| ---------- | -------------------------------- | ------ | ------ |
| npm        | @typescript-eslint/eslint-plugin | 8.69.0 | 8.71.1 |
| npm        | @typescript-eslint/parser        | 8.69.0 | 8.71.1 |


## [v8.71.1](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8711-2026-10-05)

##### 🩹 Fixes

- **eslint-plugin:** \[no-unnecessary-type-parameters] count instantiated mapped type constraints ([#12941](typescript-eslint/typescript-eslint#12941))
- **eslint-plugin:** \[prefer-optional-chain] check the constrained type ([#12953](typescript-eslint/typescript-eslint#12953))
- **eslint-plugin:** \[no-confusing-void-expression] don't autofix when declared return type is unknown ([#12930](typescript-eslint/typescript-eslint#12930))
- **eslint-plugin:** \[no-unsafe-enum-assignment] skip identical types and bound deep type walks ([#12957](typescript-eslint/typescript-eslint#12957))
- **eslint-plugin:** \[require-array-sort-compare] use array argument type constraint ([#12919](typescript-eslint/typescript-eslint#12919))
- **eslint-plugin:** \[no-unused-vars] report usedOnlyAsType for partially exported merged declarations ([#12892](typescript-eslint/typescript-eslint#12892))
- **eslint-plugin:** \[no-misused-promises] skip argument checks for calls without arguments ([#12923](typescript-eslint/typescript-eslint#12923))

##### ❤️ Thank You

- Diptajoy Mistry [@diptomistry](https://github.com/diptomistry)
- Evyatar Daud [@StyleShit](https://github.com/StyleShit)
- Josh Goldberg
- Josh Goldberg ✨
- Medhansh Poojari

See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.71.1) for more information.

You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.


## [v8.71.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8710-2026-09-28)

##### 🚀 Features

- **eslint-plugin:** \[no-unsafe-enum-assignment] add rule ([#12732](typescript-eslint/typescript-eslint#12732))

##### 🩹 Fixes

- **eslint-plugin:** \[no-misused-promises] handle a return outside of any function ([#12912](typescript-eslint/typescript-eslint#12912))
- **eslint-plugin:** \[no-unnecessary-type-assertion] specialize generic assertion report message ([#12832](typescript-eslint/typescript-eslint#12832))
- **eslint-plugin:** \[unbound-method] respect `this: void` on class properties ([7fce9127d](typescript-eslint/typescript-eslint@7fce9127d))
- **eslint-plugin:** \[switch-exhaustiveness-check] always sort literal cases in stable order ([#12885](typescript-eslint/typescript-eslint#12885))

##### ❤️ Thank You

- Evyatar Daud [@StyleShit](https://github.com/StyleShit)
- Fatih Çakır [@wfatih](https://github.com/wfatih)
- Josh Goldberg
- Josh Goldberg ✨
- Zamiell [@Zamiell](https://github.com/Zamiell)

See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.71.0) for more information.

You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.


## [v8.70.1](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8701-2026-09-21)

##### 🩹 Fixes

- **eslint-plugin:** \[no-misused-promises] handle multiple Promise constituents ([#12904](typescript-eslint/typescript-eslint#12904))
- **eslint-plugin:** \[no-useless-default-assignment] convert the fixer to a suggestion fixer ([#12826](typescript-eslint/typescript-eslint#12826))
- **eslint-plugin:** \[no-unnecessary-condition] handle union-keyed index access on the left-hand side of nullish assignment ([#12747](typescript-eslint/typescript-eslint#12747))
- **eslint-plugin:** \[unbound-method] treat Intl.Collator.prototype.compare as spec-bound ([#12845](typescript-eslint/typescript-eslint#12845))
- **eslint-plugin:** \[no-unnecessary-parameter-property-assignment] account for parameter reassignment ([#12880](typescript-eslint/typescript-eslint#12880))
- **eslint-plugin:** \[await-thenable] prevent autofix from breaking code when removing `await` ([#12716](typescript-eslint/typescript-eslint#12716))
- **eslint-plugin:** \[no-meaningless-void-operator] allow void on assignment expressions ([#12873](typescript-eslint/typescript-eslint#12873))
- **eslint-plugin:** \[no-unnecessary-type-assertion] false positive for empty object asserted to a type alias of Record ([#12869](typescript-eslint/typescript-eslint#12869))
- **eslint-plugin:** \[no-misused-spread] omit WeakMap spread suggestions ([#12850](typescript-eslint/typescript-eslint#12850))
- **eslint-plugin:** \[no-generated-empty-object-type] don't report a mapped type whose keys are not resolved yet ([#12854](typescript-eslint/typescript-eslint#12854))
- **eslint-plugin:** \[no-explicit-any] use unknown\[] for bare any rest parameters ([#12818](typescript-eslint/typescript-eslint#12818))
- **eslint-plugin:** \[no-unnecessary-type-parameters] handle type precedence in the suggestion fixer ([#12637](typescript-eslint/typescript-eslint#12637))
- **eslint-plugin:** \[no-useless-default-assignment] avoid false positives on tuples with a rest element ([#12768](typescript-eslint/typescript-eslint#12768))

##### ❤️ Thank You

- Brad Zacher [@bradzacher](https://github.com/bradzacher)
- Diptajoy Mistry [@diptomistry](https://github.com/diptomistry)
- Grit [@Grit03](https://github.com/Grit03)
- Hugo [@hugop95](https://github.com/hugop95)
- Michael Naumov [@mnaoumov](https://github.com/mnaoumov)
- Mikhail Baev [@baevm](https://github.com/baevm)
- Om Rawat
- Sanath [@sansynx](https://github.com/sansynx)
- Shinji
- Vinccool96
- 김채영 [@cchaeyoung](https://github.com/cchaeyoung)
- 송재욱

See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.70.1) for more information.

You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.


## [v8.70.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8700-2026-09-07)

##### 🚀 Features

- **eslint-plugin:** \[no-generated-empty-object-type] add rule ([#12730](typescript-eslint/typescript-eslint#12730))

##### 🩹 Fixes

- **eslint-plugin:** \[no-deprecated] report deprecated imported values used in object shorthand properties ([#12780](typescript-eslint/typescript-eslint#12780))
- **eslint-plugin:** \[no-unnecessary-condition] no false positive on RHS of a nested logical expression ([#12728](typescript-eslint/typescript-eslint#12728))
- **eslint-plugin:** \[member-ordering] don't report fields that read fields declared before them ([#12729](typescript-eslint/typescript-eslint#12729))

##### ❤️ Thank You

- Josh Goldberg ✨ [@JoshuaKGoldberg](https://github.com/JoshuaKGoldberg)
- Ulrich Stark [@ulrichstark](https://github.com/ulrichstark)

See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.70.0) for more information.

You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

1 approval >=1 team member has approved this PR; we're now leaving it open for more reviews before we merge bug Something isn't working package: eslint-plugin Issues related to @typescript-eslint/eslint-plugin

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Bug: [no-unnecessary-parameter-property-assignment] false positive after reassigning a constructor parameter

2 participants