19

我在 Typescript 中有一个对象,我正在对其进行解构以提取部分对象。但是,它未能通过我的 linter 检查:

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

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

    return null;
}

如您所见,上面的代码抓取了一个对象,并去掉了我们不想返回的对象的某些部分,并返回了该对象的其余部分。

但是,linter 会发出警告:

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

对象解构是分配passport给一个值和result另一个对象值,并且passport是未使用的对象。如何解决此问题以通过 linter?

4

3 回答 3

27

"@typescript-eslint/no-unused-vars": ["error", { "ignoreRestSiblings": true }]您可以为添加到您的规则列表中的其他兄弟禁用此验证eslintrc.js

例子:

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"
    }
  }
};

您还可以选择完全禁用该行的 linting 规则,将其添加到它上面的行:

// eslint-disable-next-line @typescript-eslint/no-unused-vars
于 2020-07-10T17:52:59.367 回答
3

您可以查看使用 删除 linter 设置ignoreRestSiblings或传递整个对象,然后查看删除该属性。

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

    if (userEntity ) {
        const {...result} = userEntity;
        delete result.password;
        return result
    }
    
    return null;
}
于 2020-07-10T17:54:26.583 回答
3

现在看来,您需要将这两条规则添加到您的.eslintrc.json.

argsIgnorePattern将允许在您的函数签名中使用下划线参数,而varsIgnorePattern将允许在解构中使用下划线。

我们使用模式:^_确保变量名以下划线开头。

例子

"rules": {
  "no-unused-vars": ["error", {
    "varsIgnorePattern": "^_",
    "argsIgnorePattern": "^_"
  }]
}

文档

笔记

在最初的问题中,使用它就足够了:"ignoreRestSiblings": true因为它与“其余兄弟姐妹”一起使用。

我仍然建议使用下划线前缀作为显式表示法。还值得注意的是,如果没有休息模式,ignoreRestSiblings在尝试解构和利用下划线表示法时将无法解决问题。

于 2021-09-01T00:30:04.713 回答