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

新手上路,请多包涵

我在一个 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());
}

原文由 Halt 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 873
2 个回答

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

可选括号与 可选大 括号属于相同的样式问题。这在很大程度上是一个品味和代码风格的问题,但为了保持一致性,这里更喜欢冗长。

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

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

尽管 is declared but never used 错误 [在 TypeScript 2.0](https://github.com/Microsoft/TypeScript/wiki/What’s-new-in-TypeScript#flag-unused-declarations-with—nounusedparameters-and—nounusedlocals) 中针对带下划线的参数进行了修复, _ 也可以触发 unused variable/parameter 或 linter 或 IDE 的警告这是反对这样做的一个相当大的论据。

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

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

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

原文由 Estus Flask 发布,翻译遵循 CC BY-SA 3.0 许可协议

() 语法更好地传达了恕我直言的意图,并且也更特定于类型

不完全是。 () 表示该函数不需要任何参数,它不声明任何参数。函数的 .length 为0。

如果您使用 _ ,它明确指出该函数将传递一个参数,但您不关心它。该函数的 .length 将为 1,这在某些框架中可能很重要。

因此,从类型的角度来看,它可能更准确(尤其是当您不使用 any 键入它时,而是说 _: Event )。正如您所说,输入的字符少了一个,在某些键盘上也更容易输入。

原文由 Bergi 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题