Repository navigation
fix(eslint-plugin): [no-unnecessary-parameter-property-assignment] account for parameter reassignment - #12880
Conversation
…low after param reassignment
|
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. |
✅ Deploy Preview for typescript-eslint ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
|
View your CI Pipeline Execution ↗ for commit 38090a6
☁️ Nx Cloud last updated this comment at |
Codecov Report✅ All modified and coverable lines are covered by tests. 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
Flags with carried forward coverage won't be shown. Click here to find out more.
🚀 New features to boost your workflow:
|
…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.
…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.
| 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.
| 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.
| 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.
| 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.
| 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.
| 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.
| 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.


PR Checklist
Overview
Parameter properties initialize
this.xwith the original argument. If the constructor then reassigns the parameter and copies it again, that second assignment is not redundant:The rule only looked at prior writes to
this.x. A write to the parameter itself never counted, sothis.name = namewas still reported.This PR records parameter assignments into the same
assignedBeforeUnnecessaryset, in source order (same CFG-blind approach as the existingthis.foo += 1insideifcases). Reassignment afterthis.x = xdoes not suppress the report, because that write does not change the value already stored onthis.This does not attempt to handle loops, where a write appearing after
this.x = xin 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 /
ifreassignment, two properties where only one is reassigned, reassignment after the copy, and the plain unnecessary case.