是否可以使用tslint防止函数嵌套?
export const function DontBeLateDate =
(isDifferent: boolean) =>
(additionalMilliseconds: Number) =>
new Date((isDifferent ? 13378335 : 83351337) + additionalMilliseconds);
导致:
DontBeLateDate(true)(1024);
在嵌套函数中使用问题isDifferent。
这应该有效:
export const function DontBeLateDate =
(isSomethingElse: boolean) => {
if (isSomethingElse) {
return (isDifferent: boolean, additionalMilliseconds: Number) =>
new Date((isDifferent ? 5 : 7) +
additionalMilliseconds);
}
return (isDifferent: boolean, additionalMilliseconds: Number) =>
new Date((isDifferent ? 13378335 : 83351337) +
additionalMilliseconds);
}
isSomethingElse范围不会渗入内部函数。
答案 0 :(得分:1)
这里有两个问题:第一个是currying,即具有返回函数的函数,因此可以像f(x)(y)
那样调用它。第二个问题是创建一个closure,即,外部函数具有局部变量,即使外部函数返回后,局部变量仍可被内部函数访问。
在评论中,您曾说过闭包是tslint所要警告的。这可以使用名为tslint-no-closures的第三方tslint规则来实现,该规则在GitHub上可用。但是,请注意,该项目的README文件目前说它正在进行中。