timered-counter
Version:
Make the value change more vivid and natural
35 lines (34 loc) • 1.15 kB
TypeScript
import { BuildInNumberAdapter } from './build-in-number.js';
import { DecimalJsAdapter } from './decimal-js.js';
/**
* 可以使用不同数字类型, 如 int, ~~bigint~~, decimal.js 等
*/
export interface NumberAdapter<T = any> {
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> = T extends NumberAdapter<infer U> ? U : never;
export type AvailableNumberAdapterValueType = ExtractNumberAdapterType<ReturnType<typeof BuildInNumberAdapter> | ReturnType<typeof DecimalJsAdapter>>;