export declare const classObjModelConstructorMethodsSymbol: unique symbol; export declare const classObjModelPropertiesSymbol: unique symbol; export declare const classObjectModelSymbol: unique symbol; export interface ClassObjModel { [classObjModelConstructorMethodsSymbol]?: Function[]; [classObjModelPropertiesSymbol]?: Record; } /** * Returns if a value is a class object model. * @param value */ export declare function isClassObjectModel(value: any): boolean; /** * A class decorator that can be used to build a class object model. * After applying the decorator, you can use the class as a normal * model because the class is model translatable. * The constructor of the class will be called whenever a valid object value for * the model is received but notice that the input data is not available in the real class constructor. * But you can mark other methods as a constructor with the constructor method decorator. * That will give you the possibility to use the input data and create async constructors. * To define properties with a model on the Object Model, you can use the ModelProp function or the Model decorator. * Zation will create an instance at start and analysis all properties to create the object model. * You also can add normal methods or properties to the class. * You can use them later because the prototype of the input will * be set to a new instance of this class. * It's also possible to extend another class that is marked as an object model. * That means the sub-model will inherit all properties, with the possibility to overwrite them. * Also, the super-model constructor-decorator-functions will be called before * the constructor-decorator-functions of the sub-object model. * The rest behaves like the normal inheritance of es6 classes. * Means the constructor on the superclass is called before the constructor on the subclass. * Also, the prototypes of the classes will be chained. * @param name The name of the object model; if it is not provided, it will use the class name. */ export declare const ObjectModel: (name?: string | undefined) => (target: any) => void;