# Fx.timeoutTo

Switches to `fallback` if the source does not produce a value within
`duration` of the previous event. Matches Effect `Stream.timeoutOrElse`
and RxJS `timeoutTo`.

## Signatures

```ts
export declare const timeoutTo: {
    <B, E2, R2>(duration: Duration.Input, fallback: Fx<B, E2, R2>): <A, E, R>(self: Fx<A, E, R>) => Fx<A | B, E | E2, R | R2 | Scope.Scope>;
    <A, E, R, B, E2, R2>(self: Fx<A, E, R>, duration: Duration.Input, fallback: Fx<B, E2, R2>): Fx<A | B, E | E2, R | R2 | Scope.Scope>;
};
```

## Why

A fallback lets an idle producer hand ownership to another push source while
preserving both sources' precise values, failures, and services.

## Ownership and lifetime

The source and resettable timer start first. On timeout the source is
interrupted, then one fallback subscription starts; the two producers never
overlap. A source failure before timeout propagates and does not start the
fallback. Interruption stops the active producer and timer. Infinite duration
returns the source unchanged; zero duration returns the fallback without
starting the source.

## Examples

```ts
import { timeoutTo } from "@typed/fx/Fx"
import { periodic, succeed } from "@typed/fx/Fx"

const available = timeoutTo(periodic("1 second"), "250 millis", succeed("offline"))
```
