Я работаю над приложением React Native, которое мне нужно для использования Flow.
Я все еще разбираюсь в концепции let arr: Array<React$Element<Component>> = []
Но есть вещи, которые пока я исследую, я не могу понять, как определить тип переменной, которую я буду использовать для clearTimeout.
используя то, что сказал этот парень: Регрессия 0.63.x: типы возвращаемых значений setTimeout () и setInterval () не работают
он говорит использовать:
const foo: TimeoutID = setTimeout(() => {}, 300);
const bar: IntervalID = setInterval(() => {}, 300);
но в итоге мне нужно сделать clearTimeout(), и я получаю:
Cannot call
clearTimeoutwiththis.playerTimeOutbound totimeoutIdbecause null or undefined (see line 17) is incompatible withTimeoutID(see https://github.com/facebook/flow/blob/v0.78.0/lib/core.js#L733).
Код:
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);
}
Очень признателен за любую помощь или конструктивные улучшения: D



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Не уверен, что за волшебство вы реализуете, но заметите, что тайм-аут будет сброшен сразу при первом запуске, поэтому вам не нужно явно вызывать clearTimeout.
Однако, если вы уверены, что вам это нужно, посмотрите, как выглядит поток:
playerTimeOut: ?TimeoutID = null;
поэтому он может быть нулевым или неопределенным.
Чтобы исправить это либо:
а) определить без может напечатать:
playerTimeOut: TimeoutID; // no question mark, no default value.
б) уточнить возможно тип с использованием условия if:
if (this.playerTimeOut) {
clearTimeout(this.playerTimeOut);
}
спасибо за прекрасное объяснение! Конечно, без типа «возможно» и слов, это просто незарегистрированная переменная этого типа, она должна очистить тайм-аут, но по-прежнему иметь тип TimourID! ты просто класс!! Еще одно СПАСИБО за объяснение с методом б), это помогло с другим вопросом, который у меня был: stackoverflow.com/questions/53302201/… Так что спасибо!