我正在开发一个React Native App,我需要使用Flow。

我仍在了解let arr: Array<React$Element<Component>> = []的整个概念

但是,就我的研究而言,有些事情我无法弄清楚如何定义用于clearTimeout的变量的类型。

使用这个人说的话:0.63.x regression: setTimeout() & setInterval() return types broken

他说使用:

const foo: TimeoutID = setTimeout(() => {}, 300);
const bar: IntervalID = setInterval(() => {}, 300);

但最终我必须制作一个clearTimeout(),然后得到:



码:
playerTimeOut: ?TimeoutID = null;

componentDidMount() {
  const { children } = this.props;
  const { index } = this.state;

  this.playerTimeOut = setTimeout(() => {
    clearTimeout(this.playerTimeOut);

    this.setState({
      index: index >= this.total ? 0 : index + 1
    });
  }, parseInt(children[index].attr.runningtime) * 1000);
}

非常感谢任何帮助或 build 性的改进:D

最佳答案

不确定要实现的魔术,但是会注意到超时将在第一次运行时清除,因此您无需显式调用clearTimeout

但是,如果确定需要此功能,则看到的流程是:

playerTimeOut: ?TimeoutID = null;

因此,它可能为null或未定义。

要解决此问题,请执行以下操作:

a)不带maybe type定义:
playerTimeOut: TimeoutID; // no question mark, no default value.

Try

b)使用if条件的refine maybe type:
if(this.playerTimeOut) {
   clearTimeout(this.playerTimeOut);
}

关于javascript - 流clearTimeout与TimeoutID不兼容,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53299372/

10-09 23:17