import type { Component } from "svelte"; export type AnyComponent = Component; type OmitNever = { [K in keyof T as T[K] extends never ? never : K]: T[K]; }; type Transforms = { [K in keyof ToProps]: { transform(props: FromProps): ToProps[K]; }; }; type Recovers = { [K in keyof ToProps]: { recover(props: FromProps, value: ToProps[K]): void; }; }; type PropsCast, ToProps extends Record, ToBindings extends keyof ToProps | "", Transform extends Transforms = Transforms, Recover extends Recovers = Recovers> = OmitNever<{ [K in keyof ToProps]: K extends keyof FromProps ? FromProps[K] extends ToProps[K] ? K extends ToBindings ? ToProps[K] extends FromProps[K] ? never : // Prop is not assignable, recover required Recover[K] & Partial : never : // Transform is required, lets check bindings Transform[K] & (K extends ToBindings ? ToProps[K] extends FromProps[K] ? Partial : Recover[K] : {}) : ToProps[K] extends undefined ? never : Transform[K] & (K extends ToBindings ? Partial : {}); }> & Partial; }>>; export type PropertiesCast = From extends Component ? To extends Component ? PropsCast : never : never; export declare function cast(Component: To, propsCast: PropertiesCast): From; export {};