import { BuildInNumberAdapter } from './build-in-number.js'; import { DecimalJsAdapter } from './decimal-js.js'; /** * 可以使用不同数字类型, 如 int, ~~bigint~~, decimal.js 等 */ export interface NumberAdapter { create(value: any): T; add(a: T, b: T): T; sub(a: T, b: T): T; mul(a: T, b: T | number): T; div(a: T, b: T): T; compare(a: T, b: T): 1 | 0 | -1; eq(a: T, b: T): boolean; gt(a: T, b: T): boolean; gte(a: T, b: T): boolean; lt(a: T, b: T): boolean; lte(a: T, b: T): boolean; isInteger(a: T): boolean; isNegative(a: T): boolean; isPositive(a: T): boolean; isZero(a: T): boolean; isNaN(a: T): boolean; isFinite(a: T): boolean; abs(a: T): T; ceil(a: T): T; floor(a: T): T; round(a: T): T; max(a: T, b: T): T; min(a: T, b: T): T; toNumber(a: T): number; toString(a: T): string; } export type ExtractNumberAdapterType = T extends NumberAdapter ? U : never; export type AvailableNumberAdapterValueType = ExtractNumberAdapterType | ReturnType>;