@synstack/enhance
Version:
Type-safe object enhancement with proxy-based method extension
16 lines (14 loc) • 815 B
text/typescript
declare const ENHANCER_NAME: unique symbol;
type Enhanced<TName extends string, TBaseObject extends object, TExtension extends object> = {
$: TBaseObject;
[ENHANCER_NAME]: TName;
} & TExtension & TBaseObject;
declare const enhance: <TName extends string, TBaseObject extends object | (object & {
[ENHANCER_NAME]: TName;
$: object;
}), TExtension extends object>(name: TName, obj: TBaseObject, extendObj: TExtension) => Enhanced<TName, TBaseObject, TExtension>;
declare const enhanceFactory: <TName extends string, TExtension extends object>(name: TName, extendObj: TExtension) => <TBaseObject extends object | (object & {
[ENHANCER_NAME]: TName;
$: object;
})>(obj: TBaseObject) => Enhanced<TName, TBaseObject, TExtension>;
export { ENHANCER_NAME, type Enhanced, enhance, enhanceFactory };