No, setTimeout is correct. If he used setInterval, what would happen is he'd end up with an infinite loop, or more so a call stack error as the code would exponentially create intervals that would become infinite. SetIntervals do not stop until you tell it to.
UseEffect requires two things. A callback and a dependency. Everytime the dependency is changed the callback is called. UseEffect is called on component mount and on change of dependency. So initial render of the component calls the timeout. After 1 second, the count is incremented, thusly triggering the callback and creating another timeout. So you get the same result of a setInterval.
Practically, setInterval would be a better approach towards a timer but this is great to showcase how React works. Though i do think this isn't a great example either, he did use useEffect and setTimeout correctly.