diff --git a/src/interval/index.ts b/src/interval/index.ts index 4964cc5a..6460661c 100644 --- a/src/interval/index.ts +++ b/src/interval/index.ts @@ -1,4 +1,13 @@ -import { Event, Store, createEvent, createStore, sample, attach, is } from 'effector'; +import { + Event, + EventCallable, + Store, + createEvent, + createStore, + sample, + attach, + is, +} from 'effector'; export function interval(config: { timeout: number | Store; @@ -27,8 +36,21 @@ export function interval({ leading?: boolean; trailing?: boolean; }): { tick: Event; isRunning: Store } & TriggerProtocol { - const setup = (start ?? createEvent()) as Event; - const teardown = (stop ?? createEvent()) as Event; + const setup = createEvent(); + if (start) { + sample({ + clock: start, + target: setup, + }); + } + + const teardown = createEvent(); + if (stop) { + sample({ + clock: stop, + target: teardown, + }); + } const tick = createEvent(); const $isRunning = createStore(false); @@ -146,8 +168,8 @@ function toStoreNumber(value: number | Store | unknown): Store { */ export type TriggerProtocol = { '@@trigger': () => { - setup: Event; - teardown: Event; + setup: EventCallable; + teardown: EventCallable; fired: Event | Event; }; };