tslint /打字稿:防止函数嵌套

时间:2019-12-14 00:40:06

标签: typescript tslint

是否可以使用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范围不会渗入内部函数。

1 个答案:

答案 0 :(得分:1)

这里有两个问题:第一个是currying,即具有返回函数的函数,因此可以像f(x)(y)那样调用它。第二个问题是创建一个closure,即,外部函数具有局部变量,即使外部函数返回后,局部变量仍可被内部函数访问。

在评论中,您曾说过闭包是tslint所要警告的。这可以使用名为tslint-no-closures的第三方tslint规则来实现,该规则在GitHub上可用。但是,请注意,该项目的README文件目前说它正在进行中。