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

答案 1

之所以可以使用这种样式(也可能是为什么在这里使用它),是因为它比 短了一个字符。_()

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

虽然箭头函数允许单个参数不带括号,但它与零、单个去结构化、单个 rest 和多个参数不一致:

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

尽管在 TypeScript 2.0 中修复了带下划线参数的错误,但也可以触发来自 linter 或 IDE 的警告。这是反对这样做的一个相当大的论据。is declared but never used_unused variable/parameter

_可以常规地用于忽略的参数(如其他答案已经解释过)。虽然这可能被认为是可以接受的,但这种习惯可能会导致与Underscore/Lodash命名空间发生冲突,当有多个被忽略的参数时,看起来也令人困惑。因此,正确命名的下划线参数(在TS 2.0中受支持)是有益的,还可以节省弄清楚函数签名的时间以及为什么参数被标记为被忽略(这违背了参数作为快捷方式的目的):__

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

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


答案 2

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

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

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

因此,从类型的角度来看,这可能是更准确的做法(特别是当您不键入但是,例如,)。。正如你所说,打字少了一个字符,在某些键盘上也更容易到达。any_: Event