import type { Constructable } from '../decorator/type/constructable.ts'; import { copyMetadataOfClasses, copyPropertiesOfClasses } from './utils.ts'; export function PartialClass(classRef: Constructable): Constructable>; export function PartialClass( classRef: Constructable, keys: K[], ): Constructable> & Omit>; export function PartialClass(classRef: Constructable, keys?: K[]): any { abstract class TargetClass {} copyMetadataOfClasses(TargetClass.prototype, [classRef.prototype], (rules, key, metadataKeyOptions) => { if (keys && !keys.includes(key)) return rules[key]; if (metadataKeyOptions?.partialClass) { return metadataKeyOptions?.partialClass(rules[key]); } return rules[key]; }); copyPropertiesOfClasses(TargetClass as any, [classRef]); return TargetClass as any; }