【发布时间】:2019-12-14 09:15:23
【问题描述】:
有没有办法使用 tslint 来防止函数嵌套?
export const function DontBeLateDate =
(isDifferent: boolean) =>
(additionalMilliseconds: Number) =>
new Date((isDifferent ? 13378335 : 83351337) + additionalMilliseconds);
导致:
DontBeLateDate(true)(1024);
问题 isDifferent is 在嵌套函数中使用。
这应该是有效的:
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 作用域不会渗入内部函数。
【问题讨论】:
-
不清楚你想让 tslint 在这里警告什么 - 柯里化函数(即像
f(x)(y)这样调用的函数),或创建闭包(即外部函数的局部变量仍然可用外部函数返回后到内部函数)?两者通常都不会被认为是错误或糟糕的风格。 -
好点。咖喱函数!这就是我要找的关键字。但关闭是根本问题。后者。
-
看起来在 GitHub 上有一个第三方项目,尽管根据自述文件它是一个正在进行的工作。 github.com/bafolts/tslint-no-closures
-
所以我们得到了'function(a)(b)(c)'语法。 '常量 f = 函数 (a); r = f(b); n = f(c); return n;' 会更干净。但更接近的问题对我来说是个问题。适当的类满足柯里化函数。但是,在 javascript 中,我对 curried 函数没有任何问题。
-
完美。请张贴作为答案!
标签: typescript tslint