declare namespace SigApi {
    interface Datapoint {
        /**
         * Returns the id of the Datapoint
         * 
         * @returns {number}
         */
        getId(): number
        /**
         * Returns the id of the parent Datapoint
         * 
         * @returns {number}
         */
        getScope(): number
        /**
         * Returns the typeId of the Datapoint
         * 
         * @returns {number}
         */
        getTypeId(): number
        /**
         * Returns the typeRefId of the Datapoint
         * 
         * @returns {number}
         */
        getTypeRefId(): number
        /**
         * Returns the value of the Datapoint
         * 
         * @returns {Promise<number|string>} Returns a Promise which is resolved when the value of the Datapoint has been read.
         * 
         * The reject function is called when the Datapoint could not be resolved.
         */
        getValue(): Promise<number | string>
        /**
         * Returns the name of the Datapoint
         * 
         * @returns {string} The name of the datapoint
         */
        getName(): string
        /**
         * Returns the full name of the Datapoint
         * 
         * @returns {string} The full name of the datapoint
         */
        getFullName(): string
        /**
         * Returns the full name of the datapoint with the station as prefix
         * 
         * @returns {string} the full name of the datapoint with the station
         */
        getFullNameWithStation(): string
        /**
         * Returns the alias of the Datapoint
         * 
         * @returns {string} the alias of the Datapoint
         */
        getAlias(): string
        /**
         * Returns the Station of the Datapoint
         * 
         * @returns {number} The Station of the Datapoint
         */
        getStation(): number
        /**
         * Returns the Accessnumber of the Datapoint
         * 
         * @returns {number} The Accessnumber of the Datapoint
         */
        getAccessNumber(): number
        /**
         * Returns the LasalId of the Datapoint
         * 
         * @returns {number} The LasalId of the Datapoint or undefined, if the lasalId was not found or the result was not computed via a dataservice query
         */
        getLasalId(): number
        /**
         * Returns a object which describes the set Limitlow Property
         * 
         * @returns {object} object {type: `number`, value: `string|number`}
         * 
         * The type attribute describes if the set limit is a constant(1), a datapoint(2) or not set(0)
         * 
         * If it is a constant, the value is the set limit and if it is an datapoint the value is the datapoint id.
         * 
         * If no limit was set, the value is undefined
         */
        getLimitLow(): { type: number, value: number | string }
        /**
         * Returns a object which describes the set Limithigh Property
         * 
         * @returns {object} object {type: `number`, value `string|number`}
         * 
         * The type attribute describes if the set limit is a constant(1), a datapoint(2) or not set(0)
         * 
         * If it is a constant, the value is the set limit and if it is an datapoint the value is the datapoint id.
         * 
         * If no limit was set, the value is undefined
         */
        getLimitHigh(): { type: number, value: number | string }
        /**
         * Returns the bitNoStrSize of the Datapoint
         * 
         * bitNoStrSize is used as maxlength for 'string'-Datapoints (0 -> no limit)
         * 
         * @returns {number} the bitNoStrSize of the Datapoint
         */
        getBitNoStrSize(): number
        /**
         * Returns the CRC of the Datapoint
         * 
         * @returns {number} the CRC of the Datapoint
         */
        getCRC(): number
        /**
         * Returns the Parent Datapoint
         * 
         * @returns {Datapoint|null} The parent (class) datapoint of this datapoint, of null if there exists no parent 
         */
        getParent(): Datapoint | null
        /**
         * Returns an Object with all set properties
         * 
         * @returns {object} object {src: `number`, dest: `number`, value: `number|string`}
         * 
         * An Object, where the keys of that objects are the names of the set properties.
         * 
         * The Values are Objects, where each object has an src attribute, which describes the type of Property (-> SIG_CONST.PROP_SRC_...),
         * and dest Property which describes the destination of the Property (-> SIG_CONST.PROP_DEST_...) and an value attribute,
         * which is the actual value of the Property
         * 
         * For more details see ApiProperties
         */
        getProperties(): any
        /**
         * Returns the menuId property
         * 
         * @returns {number|null}
         */
        getMenuId(): number | null
        /**
         * Returns the value which was set to the userdefined bits
         * 
         * @returns {bigInt} The value of the userdefined bits or undefined if this was not part of a DS query
         */
        getUserdefinedBits(): bigint
        /**
         * Add an observer via the API
         * 
         * @param {Function} callback Callback function when value of dp changes
         * @returns {string} The uid from the added observer ("id" + unique number -> idXXXXXXX)
         */
        addObserver(callback: (value: number | string) => void): string
        /**
         * Removes an observer with the given id from the observer list which would be called when 
         * the registered dp changes.
         * 
         * @param {string} id The uid of the observer (value change callback) which should be removed 
         * @returns {boolean} Returns true if a suitable Observer with the given ID has been found and successfully removed. Otherwise false will be returned.
         */
        removeObserver(id: string): boolean
        /**
         * Returns a boolean which indicates if the type of the datapoint is a floatingPoint 
         * 
         * @returns {boolean} true if the datapoint type is a floating Point (e.g. REAL, LREAL, ...) or false otherwise 
         */
        isFloatingPoint(): boolean
    }
}
