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
}
|