javascript - 在 ES6/Typescript 中使用带有箭头函数的 _(下划线)变量

标签 javascript typescript ecmascript-6 arrow-functions

我在一个 Angular 示例中遇到了这个结构,我想知道为什么选择它:

_ => console.log('Not using any parameters');

我知道变量 _ 意味着不关心/不使用但是因为它是唯一的变量所以有任何理由更喜欢使用 _ :

() => console.log('Not using any parameters');

肯定不会少输入一个字符。在我看来,() 语法更好地传达了意图,并且也更特定于类型,否则我认为第一个示例应该如下所示:

(_: any) => console.log('Not using any parameters');

如果重要的话,这是使用它的上下文:

submit(query: string): void {
    this.router.navigate(['search'], { queryParams: { query: query } })
      .then(_ => this.search());
}

最佳答案

可以使用这种样式的原因(可能也是这里使用它的原因)是 _() 短一个字符。

可选括号属于与 optional curly brackets 相同的样式问题.这在很大程度上是一个品味和代码风格的问题,但为了保持一致性,此处更倾向于冗长。

虽然箭头函数允许单参数不带括号,但它与零、单解构、单剩余和多参数不一致:

let zeroParamFn = () => { ... };
let oneParamFn = param1 => { ... };
let oneParamDestructuredArrFn = ([param1]) => { ... };
let oneParamDestructuredObjFn = ({ param1 }) => { ... };
let twoParamsFn = (param1, param2) => { ... };
let restParamsFn = (...params) => { ... };

尽管 已声明但从未使用过 错误 was fixed in TypeScript 2.0对于带下划线的参数,_ 还可以从 linter 或 IDE 触发 unused variable/parameter 警告。这是反对这样做的一个相当大的论据。

_ 通常可以用于忽略的参数(正如其他答案已经解释的那样)。虽然这可能被认为是可以接受的,但这种习惯可能会导致与 _ Underscore/Lodash 命名空间的冲突,当有多个被忽略的参数时也会看起来很困惑。出于这个原因,正确命名带下划线的参数(在 TS 2.0 中支持)是有益的,还可以节省计算函数签名和参数被标记为忽​​略的原因的时间(这违背了 _ 参数的目的作为快捷方式):

let fn = (param1, _unusedParam2, param3) => { ... };

出于上述原因,我个人认为 _ => { ... } 代码风格是一种应该避免的坏语气。

关于javascript - 在 ES6/Typescript 中使用带有箭头函数的 _(下划线)变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41085189/

相关文章:

javascript - Moment.Js : Offsetting dates using UTC and Timezone offset

javascript - 从未在 ApiController 中调用 Post 方法

javascript - Angular : Why my watch is not working

javascript - 在没有 authguard 的情况下禁用 Angular 7 中的 url 更改导航或直接页面访问?

javascript - 在函数外的 Javascript 脚本中使用 "return"关键字

javascript - 我尝试使用按钮下载本地文件,但找不到该文件

javascript - TypeScript - 模块在运行时未定义

angular - ionic2 - 在侧边菜单中添加注销

node.js - 箭头函数不在 ES6 类中绑定(bind) `this` 吗?

webpack - 即使使用 babel 插件,解构赋值在 IE 11 中也不起作用