// overload 4: object format with object props declaration
// see `ExtractPropTypes` in ./componentProps.ts
export function createComponent<
+ // the Readonly constraint allows TS to treat the type of { required: true }
+ // as constant instead of boolean.
PropsOptions extends Readonly<ComponentPropsOptions>,
RawBindings,
D,
): StopHandle
// overload #3: array of multiple sources + cb
+// Readonly constraint helps the callback to correctly infer value types based
+// on position in the source array. Otherwise the values will get a union type
+// of all possible value types.
export function watch<T extends Readonly<WatcherSource<unknown>[]>>(
sources: T,
cb: WatchHandler<MapSources<T>>,