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 目前说它是一项正在进行的工作。