我可以限制一个函数在TypeScript中是纯函数吗?

gsa*_*ras 9 javascript function web typescript pure-function

有没有办法让TypeScript中的函数仅是函数(因此不接受该函数为非纯函数)?如果是的话,哪个?

Mad*_*iha 5

您也许可以编写一些TSLint规则来捕获大多数常见情况(例如,访问外部变量),但是几乎不可能检查类似的事情,因此实际上无法知道100%。

您(和您的团队)仍然必须受到纪律处分。

  • 您传递给该纯函数的对象类型不会使其变得不纯。这将使所有 lodash 函数(如 _.forEach、_.map)变得不纯,但事实并非如此。他们都是纯洁的。如果在回调函数中引起副作用,则回调是不纯的,但 _.map 和 _.forEach 函数本身并不是不纯的。 (4认同)
  • 功能纯度检测无需解决暂停问题。 (2认同)
  • 例如,您可能以为const getX = obj => obj.x是纯粹的,但是我仍然可以传递`{get x(){doSideEffect(); 返回42; }}`,您不能赢,不能用JavaScript。 (2认同)