Search code examples
javascripttypescripteslinttypescript-eslint

Typescript object destructuring is caught by ESLint no-unused-vars rule


I have an object in Typescript that I am destructuring in order to extract a partial object. However, it fails my linter check:

async someFunction(username: string): Promise<UserDTO> {
    const userEntity = await getUserByUsernameAsync(username);

    if (userEntity ) {
        const { password, ...result } = userEntity ;
        return result;
    }

    return null;
}

As you can see, the above code grabs an object and strips out some parts of the object that we don't want to return, and returns the rest of the object.

However, the linter gives a warning:

warning  'password' is assigned a value but never used      @typescript-eslint/no-unused-vars

The object destructuring is assigning passport to a value and result to another object value and passport is the one that isn't being used. How do I fix this issue in order to pass the linter?


Solution

  • You can disable this verification for rest siblings adding "@typescript-eslint/no-unused-vars": ["error", { "ignoreRestSiblings": true }] to your list of rules in eslintrc.js.

    Example:

    module.exports = {
      root: true,
      parser: "@typescript-eslint/parser",
      plugins: [
        "@typescript-eslint",
      ],
      extends: [
        "plugin:@typescript-eslint/eslint-recommended",
        "plugin:@typescript-eslint/recommended"
      ],
      rules: {
        "@typescript-eslint/no-unused-vars": ["error", { "ignoreRestSiblings": true }]
      },
      settings: {
        react: {
          version: "detect"
        }
      }
    };
    
    

    You can also opt for disabling the linting rule for that line altogether adding this to the line above it:

    // eslint-disable-next-line @typescript-eslint/no-unused-vars