import Big, { BigSource } from 'big.js' import LRU from 'lru-cache' const calcOperateMap = { '+': 'add', '-': 'sub', '*': 'mul', '/': 'div' } as const /** * 数值计算(数值计算最好交由后端处理) * @param number1 数字1 * @param number2 数字2 * @param operate 操作符 默认‘+’ * @returns 计算后的结果 */ export function calc (number1: BigSource, number2: BigSource, operate: '+'|'-'|'*'|'/' = '+') { const operateMethod = calcOperateMap[operate] if (operateMethod === undefined) return new Big(number1).toNumber() const result: Big = new Big(number1)[operateMethod](number2) return result.toNumber() } /** * 获取缓存方法 * @param fn 需要被缓存的方法 * @param max 最大缓存数 * @returns [缓存方法,清除缓存方法] */ export function getCahceFn (fn: (val: U) =>T, max = 20) { const cache = new LRU({ max, maxAge: 60 * 1000 }) return [(val: U) => { // eslint-disable-next-line @typescript-eslint/no-non-null-assertion if (cache.has(val)) return cache.get(val)! const result = fn(val) cache.set(val, result) return result }, () => { cache.clear() }] }