/** * Shorthand for {@link Parameters} of optional callbacks. * * @example * ```ts * const { onClick } = CustomClass.prototype * CustomClass.prototype.onClick = function (...args: CallbackParams) { * const r = onClick?.apply(this, args) * // ... * return r * } * ``` */ export type CallbackParams any) | undefined> = Parameters> /** * Chain multiple callbacks together. * * @param originalCallback - The original callback to chain. * @param callbacks - The callbacks to chain. * @returns A new callback that chains the original callback with the callbacks. */ export const useChainCallback = < O, T extends (this: O, ...args: any[]) => void >( originalCallback: T | undefined, ...callbacks: ((this: O, ...args: Parameters) => void)[] ) => { return function (this: O, ...args: Parameters) { originalCallback?.call(this, ...args) for (const callback of callbacks) callback.call(this, ...args) } }