tslint / typescript:防止函数嵌套
tslint / typescript: Prevent function nesting
有没有办法使用 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 范围不会渗入内部函数。
这里有两个问题:第一个是currying, i.e. having a function which returns a function, so that it can be called like f(x)(y)
. The second issue is creating a closure,即外部函数有局部变量,即使在外部函数返回后,内部函数仍然可以访问这些局部变量。
您在评论中说过闭包是您希望 tslint 发出警告的内容。这可以使用名为 tslint-no-closures 的第三方 tslint 规则来实现,该规则在 GitHub 上可用。但是,请注意该项目的 README 目前说它是一项正在进行的工作。
有没有办法使用 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 范围不会渗入内部函数。
这里有两个问题:第一个是currying, i.e. having a function which returns a function, so that it can be called like f(x)(y)
. The second issue is creating a closure,即外部函数有局部变量,即使在外部函数返回后,内部函数仍然可以访问这些局部变量。
您在评论中说过闭包是您希望 tslint 发出警告的内容。这可以使用名为 tslint-no-closures 的第三方 tslint 规则来实现,该规则在 GitHub 上可用。但是,请注意该项目的 README 目前说它是一项正在进行的工作。