import type { AnyObject, DeepReadonly, Nullable, TypedKeys } from '../../types/index.js'; export type NumKey = TypedKeys; export type AbsOptions = false | 'remove' | 'zero'; export type RoundOptions = 'floor' | 'ceil' | 'round'; export type DELETE_TYPE = 'delete'; export interface IObjectOps { readonly Empty: Readonly; isEmpty(o: Nullable>): boolean; getEmpty(): T; clone(o: Nullable>): T; isValid(o: Nullable>): boolean; isEquals(a: Nullable>, b: Nullable>): boolean; assign(to: T, other: Nullable>): void; } export interface IObjectMath extends IObjectOps { contains(base: Nullable>, target: Nullable>): boolean; inverse(o: Nullable>): T; abs(o: DeepReadonly, options?: AbsOptions): T; abs(o: Nullable>, options?: AbsOptions): T | null; round(o: DeepReadonly, options?: RoundOptions): T; round(o: Nullable>, options?: RoundOptions): T | null; add(o1: Nullable>, o2: Nullable>): T; subtract(base: Nullable>, amount: Nullable | number>): T; multiply(o1: Nullable>, o2: Nullable | number>): T; div(o1: Nullable>, o2: Nullable): T; div(o1: Nullable>, o2: Nullable>): number; } export type BasePair = IObjectOps> = { key: TKey; ops: TOps; }; export type OpsPair = BasePair>; export type MathPair = BasePair>; export type OpsPairsMap = { [K in keyof T]?: IObjectOps; }; export type MathPairsMap = { [K in keyof T]?: IObjectMath; };