3 回答

TA贡献1834条经验 获得超8个赞
之所以可以使用此样式(可能是在此处使用该样式)的原因_是比短一个字符()。
可选括号与可选大括号属于同一样式问题。这在很大程度上取决于品味和代码风格,但由于一致性,在这里倾向于冗长。
尽管箭头函数允许单个参数不带括号,但它与零,单个解构,单个休止符和多个参数不一致:
let zeroParamFn = () => { ... };
let oneParamFn = param1 => { ... };
let oneParamDestructuredArrFn = ([param1]) => { ... };
let oneParamDestructuredObjFn = ({ param1 }) => { ... };
let twoParamsFn = (param1, param2) => { ... };
let restParamsFn = (...params) => { ... };
尽管is declared but never used错误固定在打字稿2.0为下划线的参数,_也可以触发unused variable/parameter从棉绒或IDE警告。这是反对这样做的一个相当大的理由。
_通常可以用于忽略的参数(如已经解释的其他答案)。尽管这可能被接受,但是这种习惯可能会导致与_Underscore / Lodash命名空间发生冲突,并且在存在多个被忽略的参数时也会令人困惑。因此,正确命名带下划线的参数(在TS 2.0中受支持)是有益的,还节省了找出函数签名的时间以及为什么将这些参数标记为忽略的原因(这违背了将_参数作为快捷方式的目的):
let fn = (param1, _unusedParam2, param3) => { ... };
由于上述原因,我个人认为_ => { ... }代码风格是一种不好的语气,应该避免。

TA贡献1859条经验 获得超6个赞
该()语法传达的意图更好恕我直言,也是更具体的类型
不完全是。()表示该函数不包含任何参数,不声明任何参数。该函数.length为0。
如果使用_,它将明确声明该函数将被传递一个参数,但您对此并不在意。该函数的.length值为1,这在某些框架中可能很重要。
因此,从类型的角度来看,这可能是更准确的操作(尤其是当您不使用any而是键入时_: Event)。正如您所说,键入的字符减少了一个字符,在某些键盘上也更容易触及。

TA贡献1784条经验 获得超8个赞
可以区分这两种用法,并且某些框架使用它来表示不同类型的回调。例如,我认为节点表达框架使用它来区分中间件的类型,例如错误处理程序使用三个参数,而路由使用两个参数。
这样的区分看起来像下面的例子:
const f1 = () => { } // A function taking no arguments
const f2 = _ => { } // A function with one argument that doesn't use it
function h(ff) {
if(ff.length==0) {
console.log("No argument function - calling directly");
ff()
} else if (ff.length==1) {
console.log("Single argument function - calling with 1");
ff(1)
}
}
h(f1)
h(f2)
添加回答
举报