import type { GenericDescriptor, PropertyDescriptor } from '../index';

declare function CompletePropertyDescriptor<D extends PropertyDescriptor>(
    Desc: D & ThisType<any>,
): Required<
    D extends { '[[Value]]': infer T }
        ? GenericDescriptor & {
            '[[Value]]': T;
            '[[Writable]]': boolean;
        }
        : D extends { '[[Value]]'?: infer T | undefined } | { '[[Writable]]'?: boolean | undefined }
        ? GenericDescriptor & {
            '[[Value]]': T | undefined;
            '[[Writable]]': boolean;
        }
        : D extends { '[[Get]]'?: (() => infer T) | undefined } | { '[[Set]]'?: ((value: infer T) => void) | undefined }
        ? GenericDescriptor & {
            '[[Get]]': (() => T) | undefined;
            '[[Set]]': ((value: T) => void) | undefined;
        }
        : D & PropertyDescriptor
>;
declare function CompletePropertyDescriptor(Desc: PropertyDescriptor & ThisType<any>): Required<PropertyDescriptor>;
export = CompletePropertyDescriptor;
