Skip to content

Function: propsAndEmitsFactory()

ts
function propsAndEmitsFactory<P, E>(
  props: P,
  emits: E,
  source: string,
): {
  emits: EmitFunctions<E>;
  makeProps: PropFactory<{
    [KeyType in string | number | symbol]: ({
      [Key in string | number | symbol as Key extends keyof PickIndexSignature<
        EmitHandlerProps<E>
      >
        ? never
        : Key]: PickIndexSignature<P>[Key];
    } & PickIndexSignature<EmitHandlerProps<E>> & {
        [Key in
          | string
          | number
          | symbol as Key extends keyof OmitIndexSignature<EmitHandlerProps<E>>
          ? never
          : Key]: OmitIndexSignature<P>[Key];
      } & OmitIndexSignature<EmitHandlerProps<E>>)[KeyType];
  }>;
};

Factory that combines props and emits definitions into a unified system. Automatically adds handler props (onX) for each emit, supporting both camelCase and kebab-case.

Type Parameters

Type ParameterDescription
P extends ComponentObjectPropsOptions<Data>The props options type
E extends EmitValidatorsThe emits validators type

Parameters

ParameterTypeDescription
propsPThe props definitions
emitsEThe emits validators
sourcestringA string identifier for debugging purposes

Returns

ts
{
  emits: EmitFunctions<E>;
  makeProps: PropFactory<{
    [KeyType in string | number | symbol]: ({
      [Key in string | number | symbol as Key extends keyof PickIndexSignature<
        EmitHandlerProps<E>
      >
        ? never
        : Key]: PickIndexSignature<P>[Key];
    } & PickIndexSignature<EmitHandlerProps<E>> & {
        [Key in
          | string
          | number
          | symbol as Key extends keyof OmitIndexSignature<EmitHandlerProps<E>>
          ? never
          : Key]: OmitIndexSignature<P>[Key];
      } & OmitIndexSignature<EmitHandlerProps<E>>)[KeyType];
  }>;
}

An object with makeProps factory and emits functions

NameType
emitsEmitFunctions<E>
makePropsPropFactory<{ [KeyType in string | number | symbol]: ({ [Key in string | number | symbol as Key extends keyof PickIndexSignature<EmitHandlerProps<E>> ? never : Key]: PickIndexSignature<P>[Key] } & PickIndexSignature<EmitHandlerProps<E>> & { [Key in string | number | symbol as Key extends keyof OmitIndexSignature<EmitHandlerProps<E>> ? never : Key]: OmitIndexSignature<P>[Key] } & OmitIndexSignature<EmitHandlerProps<E>>)[KeyType] }>