Skip to content

Core API

extractVariables(expression)

从公式表达式中提取变量名。

extractFunctions(expression)

从公式表达式中提取函数名。

ts
extractFunctions('round(max(price, floor(base * rate)))');
// ['round', 'max', 'floor']

validateFormula(expression)

校验公式语法,返回 { valid, errors }

validateFormulaPolicy(expression, policy)

在语法校验之外,额外限制可用函数、可用变量和表达式长度。

ts
validateFormulaPolicy('round(price * count)', {
  allowedFunctions: ['round'],
  allowedVariables: ['price', 'count'],
  maxExpressionLength: 64,
});

calculateFormula(expression, values)

计算公式,返回 { value, errors }。结果限定为有限数字。

ts
calculateFormula('price * count', {
  price: 10,
  count: 3,
});

formatFormulaValue(value, options?)

把计算结果格式化为适合展示的字符串。

ts
formatFormulaValue(237.60000000000002, { precision: 12 });
// '237.6'

getFormulaSummary(expression)

一次性返回表达式、变量、合法性和错误。

ts
getFormulaSummary('price * count');

createFormulaRunner(expression)

预编译公式,适合表单实时计算。

ts
const runner = createFormulaRunner('price * count');
runner.calculate({ price: 10, count: 3 });

calculateFormulaBatch(definitions, values)

按顺序计算一组公式,并把前面公式的结果写回后续公式可用的 values。

ts
calculateFormulaBatch(
  [
    { name: 'subtotal', expression: 'price * count' },
    { name: 'tax', expression: 'subtotal * taxRate' },
    { name: 'total', expression: 'subtotal + tax' },
  ],
  { price: 100, count: 2, taxRate: 0.06 },
);

支持的表达式范围

core 计算层使用内置有限 evaluator,不执行任意 JavaScript。当前支持:

  • 数字、变量、括号、一元 +-
  • +-*/%^
  • absceilcosexpfloorlogmaxminroundsinsqrttan