Skip to content

Bug: [typedef] false positive with deep array destructuring #5233

Closed
@sashaqred

Description

@sashaqred

Before You File a Bug Report Please Confirm You Have Done The Following...

  • I have tried restarting my IDE and the issue persists.
  • I have updated to the latest version of the packages.
  • I have searched for related issues and found none that matched my issue.
  • I have read the FAQ and my problem is not listed.

Playground Link

https://typescript-eslint.io/play/#ts=4.6.4&sourceType=module&code=JYOwLgpgTgZghgYwgAgGIHt3IN7IFDLIBGcUAXMgM5hSgDmA3HgL554D07yAygBboBXADYATYigTooUCAjAAaYgLDIhoSFCr8A7sm2kQ9PDAEg5wdCFXo6qYFGoAhUgAoA2rhKbmAXQoZ0Nx8AShwCZEkQSnQhCAA6IRsXL2CmVg4uPkFRcQipGTlFImVVdWgtdF19KEMQOmNTc0trW3snUgBJEAB5MF5oAHU4AE93T1JkXwo3AJCwwkjo2ISklLS2Th5+YTEiCXzZBSUVNXByyh09AyNFlTc3Lx8-Khp6IKDkAF5ke4ByL1+TzYZVgiBQABEIBAAA4BebIOAUbDhQhEJEowgRfyYJiYybhVjpTYDYB9ZAgCDUCBidBEABWh0oeikAGsmTBQBA8LccIjsGjsAgyPzSGQvABGZhS5gUSEwuHfbB8gVCkXkf6kX7S5gMIA&eslintrc=N4KABGBEBOCuA2BTAzpAXGUEKQAIBcBPABxQGNoBLY-AWhXkoDt8B6I0gE0QDN0wA2uGw4A7gENoTSABphIrCKU5J0cYQAiKfHDL5YVJgHN+O2IjnLlkVQHtRABUniAtonyJopuBflWcbi4ARp4AapKU4kFIWmTwzviUttIYZr7+IpC2QQBWiHpayGZ6BswmqT6WGTjEzm4eXhXmVdWQxNC2pNBEsfFqicnezX7+kABuEVEx+X3iAylgaS0Z45PRiL0JSUwAkkZMttCIAGKwTHrbQ4gjYAC+fgC6wve3QA&tsconfig=N4KABGBEDGD2C2AHAlgGwKYCcDyiAuysAdgM6QBcYwAviNUA

Repro Code

interface Foo { 
  bar: string;
}

// Should be correct, but linter show warning
function logFirstBar([{ bar }]: Foo[]) {
  console.log(bar);
}

// Should be correct, but linter show warning
function logFirstBarInOtherWay([{ bar }]: [Foo]) {
  console.log(bar);
}

// Should be correct, but linter show warning
const [[bar]]: string[][] = [['bar']]

interface DeepFoo {
  a: {
    b: {
      c: Foo;
    }
  }
}

// With nested objects works fine
const {a:{b:{c:{bar:bar1}}}}: DeepFoo = {a:{b:{c:{bar:'bar'}}}};

ESLint Config

module.exports = {
  parser: "@typescript-eslint/parser",
  "rules": {
    "@typescript-eslint/typedef": [
      "warn",
      {
            "arrayDestructuring": true,
            "arrowParameter": true,
            "memberVariableDeclaration": true,
            "objectDestructuring": true,
            "parameter": true,
            "propertyDeclaration": true,
            "variableDeclaration": true,
            "variableDeclarationIgnoreFunction": true
      }
    ]
  }
};

tsconfig

No response

Expected Result

I expected that nested destructuring of arrays with types (like [{ bar }]: Foo[]) wouldn't throw the error "Expected a type annotation" on lines 6, 11, and 16.

Actual Result

There were errors "Expected a type annotation" on the lines 6, 11, and 16

Additional Info

Similar issue connected with object restructuring #4725

Versions

package version
@typescript-eslint/eslint-plugin 5.29.0
@typescript-eslint/parser 5.29.0
TypeScript 4.6.3
ESLint 8.18.0
node 16.14.2

Metadata

Metadata

Assignees

No one assigned

    Labels

    accepting prsGo ahead, send a pull request that resolves this issuebugSomething isn't workinggood first issueGood for newcomerspackage: eslint-pluginIssues related to @typescript-eslint/eslint-plugin

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions