All files / src/utils number.ts

100% Statements 5/5
100% Branches 14/14
100% Functions 2/2
100% Lines 4/4

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24            48x 41x 48x                     37x        
/**
 * 后端 decimal 字段以字符串下发(如 brokerRatio / myRatio),
 * 直接 `Number()` 遇到 "0.35%"、"abc" 会得到 NaN 并渲染上屏。
 * 统一在此收口:非法值一律退化为 fallback,绝不产出 NaN。
 */
export function toNumber(value: unknown, fallback = 0): number {
  if (value === null || value === undefined || value === '') return fallback
  const n = typeof value === 'number' ? value : Number(value)
  return Number.isFinite(n) ? n : fallback
}
 
/**
 * 契约枚举白名单校验:后端新增状态码时不让原始码直接露到界面上。
 */
export function pickEnum<T extends string>(
  raw: unknown,
  allowed: readonly T[],
  fallback: T
): T {
  return typeof raw === 'string' && (allowed as readonly string[]).includes(raw)
    ? (raw as T)
    : fallback
}