箭头函数隐式返回用括号自动包装

Posted

技术标签:

【中文标题】箭头函数隐式返回用括号自动包装【英文标题】:Arrow function implicit return wrapped automatically with parenthesis 【发布时间】:2019-05-11 12:01:25 【问题描述】:

我正在使用带有 Prettier 的 Visual Studio Code,功能如下:

(token: string) => this.token = token

变成:

(token: string) => (this.token = token)

我认为它会降低可读性... 有没有办法防止这种情况发生?

【问题讨论】:

为什么你觉得添加括号会降低代码的可读性? @d_kennetz 不必要的噪音 @d_kennetz 因为它使块代码看起来更像一个表达式,如果你读得太快,它会将“=>”变成赋值“=”。 【参考方案1】:

在less opinionated code formatter 出现之前,这是一个解决方案(如果它已经存在,请指出给我)。

打开以下文件:

Windows %USERPROFILE%\.vscode\extensions\esbenp.prettier-vscode-5.8.0\node_modules\prettier\index.js ma​​cOSLinux ~/.vscode/extensions/esbenp.prettier-vscode-5.8.0/node_modules/prettier/index.js

(其中%USERPROFILE% 通常是C:\Users\YourUsernameHere\

如果您来自未来,您可能会看到 esbenp.prettier-vscode-X.X.X 文件夹的不同版本名称。相应地修改路径。

使用 Ctrl + F 搜索 case "AssignmentExpression":(大约出现四到五次),直到找到 this little snippet of code。将图中的return true 更改为return false。我在41587 行找到了该声明,但这可能会在未来版本的 Prettier 中发生变化,因此请使用 Ctrl + F 搜索。

保存文件,重新启动 VSCode,它就像魔术一样工作。

我发现 macOS may get upset with you 上的 VSCode 用于摆弄内部结构。弹出窗口中应该有一些设置图标,可以让您选择忽略错误。选择忽略错误,然后重新启动 VSCode,它应该可以正常工作了。

【讨论】:

【参考方案2】:

您可以添加配置文件进行自定义配置,可以是 json、js、yaml 等,请参考此链接这可能对您有所帮助

https://prettier.io/docs/en/configuration.html

对于箭头函数,如果您使用 json,可能您必须在 .prettierrc 文件中使用 "arrowParens": "aviod"架构以避免自动添加括号。

【讨论】:

这条规则只影响参数【参考方案3】:

这是由于 no-return-assign 规则造成的。见https://eslint.org/docs/rules/no-return-assign。

不管你怎么想,你的箭头函数等价于

(token: string) => return this.token = token

是的,那里有一个回报,并且由于分配而得到“美化”。

此规则的唯一两个选项是在存在括号时允许,或始终禁止。

因此,要解决您的“可读性问题”,请使用花括号,或尝试禁用规则(不推荐)。

【讨论】:

以上是关于箭头函数隐式返回用括号自动包装的主要内容,如果未能解决你的问题,请参考以下文章

将对象文字包装在箭头函数中的括号是啥意思? [复制]

coffeescript 函数 箭头表达式

箭头函数

ES6学习---箭头函数

箭头函数

nodejs 箭头函数