流clearTimeout与TimeoutID不兼容

时间:2018-11-14 11:38:24

标签: javascript react-native flowtype

我正在开发一个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()并得到:

  

无法调用绑定了{{1}的clearTimeoutthis.playerTimeOut的{​​{1}},因为null或undefined(请参阅第17行)与timeoutId(请参阅https://github.com/facebook/flow/blob/v0.78.0/lib/core.js#L733)不兼容。 / p>

代码:

TimeoutID

真的很感谢您的帮助或建设性的改进:D

1 个答案:

答案 0 :(得分:4)

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

但是,如果您确定需要此功能,则会看到以下流程:

playerTimeOut: ?TimeoutID = null;

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

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

a)不使用maybe type进行定义:

playerTimeOut: TimeoutID; // no question mark, no default value.

Try

b)refine maybe type使用if条件:

if(this.playerTimeOut) {
   clearTimeout(this.playerTimeOut);
}