Typescript 对象解构被 ESLint no-unused-vars 规则捕获
Typescript object destructuring is caught by ESLint no-unused-vars rule
我在 Typescript 中有一个对象,我正在解构它以提取部分对象。但是,它没有通过我的 linter 检查:
async someFunction(username: string): Promise<UserDTO> {
const userEntity = await getUserByUsernameAsync(username);
if (userEntity ) {
const { password, ...result } = userEntity ;
return result;
}
return null;
}
如您所见,上面的代码抓取了一个对象并去掉了对象中我们不想 return 的一些部分,return 删除了对象的其余部分。
然而,linter 给出警告:
warning 'password' is assigned a value but never used @typescript-eslint/no-unused-vars
对象解构正在将 passport
分配给一个值,将 result
分配给另一个对象值,而 passport
是未使用的值。我该如何解决这个问题才能通过 linter?
您可以在 eslintrc.js
.
中添加 "@typescript-eslint/no-unused-vars": ["error", { "ignoreRestSiblings": true }]
到您的规则列表中,为其他兄弟姐妹禁用此验证
示例:
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
您可以使用 ignoreRestSiblings
删除 linter 设置或传递整个对象然后删除 属性。
async someFunction(username: string): Promise<UserDTO> {
const userEntity = await getUserByUsernameAsync(username);
if (userEntity ) {
const {...result} = userEntity;
delete result.password;
return result
}
return null;
}
看来现在您需要将这两条规则添加到您的 .eslintrc.json
。
argsIgnorePattern
将允许在函数签名中使用下划线参数,而 varsIgnorePattern
将允许在解构中使用下划线。
我们使用模式:^_
来确保变量名称以下划线开头。
例子
"rules": {
"no-unused-vars": ["error", {
"varsIgnorePattern": "^_",
"argsIgnorePattern": "^_"
}]
}
文档
- https://eslint.org/docs/rules/no-unused-vars#argsignorepattern
- https://eslint.org/docs/rules/no-unused-vars#varsignorepattern
备注
在最初的问题中,使用:"ignoreRestSiblings": true
就足够了,因为它与“其余兄弟姐妹”一起使用。
我仍然建议使用下划线前缀作为显式表示法。还值得注意的是,如果没有休息模式,ignoreRestSiblings
将无法解决尝试解构和使用下划线符号时的问题。
我在 Typescript 中有一个对象,我正在解构它以提取部分对象。但是,它没有通过我的 linter 检查:
async someFunction(username: string): Promise<UserDTO> {
const userEntity = await getUserByUsernameAsync(username);
if (userEntity ) {
const { password, ...result } = userEntity ;
return result;
}
return null;
}
如您所见,上面的代码抓取了一个对象并去掉了对象中我们不想 return 的一些部分,return 删除了对象的其余部分。
然而,linter 给出警告:
warning 'password' is assigned a value but never used @typescript-eslint/no-unused-vars
对象解构正在将 passport
分配给一个值,将 result
分配给另一个对象值,而 passport
是未使用的值。我该如何解决这个问题才能通过 linter?
您可以在 eslintrc.js
.
"@typescript-eslint/no-unused-vars": ["error", { "ignoreRestSiblings": true }]
到您的规则列表中,为其他兄弟姐妹禁用此验证
示例:
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
您可以使用 ignoreRestSiblings
删除 linter 设置或传递整个对象然后删除 属性。
async someFunction(username: string): Promise<UserDTO> {
const userEntity = await getUserByUsernameAsync(username);
if (userEntity ) {
const {...result} = userEntity;
delete result.password;
return result
}
return null;
}
看来现在您需要将这两条规则添加到您的 .eslintrc.json
。
argsIgnorePattern
将允许在函数签名中使用下划线参数,而 varsIgnorePattern
将允许在解构中使用下划线。
我们使用模式:^_
来确保变量名称以下划线开头。
例子
"rules": {
"no-unused-vars": ["error", {
"varsIgnorePattern": "^_",
"argsIgnorePattern": "^_"
}]
}
文档
- https://eslint.org/docs/rules/no-unused-vars#argsignorepattern
- https://eslint.org/docs/rules/no-unused-vars#varsignorepattern
备注
在最初的问题中,使用:"ignoreRestSiblings": true
就足够了,因为它与“其余兄弟姐妹”一起使用。
我仍然建议使用下划线前缀作为显式表示法。还值得注意的是,如果没有休息模式,ignoreRestSiblings
将无法解决尝试解构和使用下划线符号时的问题。