import Decimal from "decimal.js"; import { INumber } from "./numbers"; import type { DeserializeNumberHandling, SerializeNumberHandling } from "../TASONSerializerOptions"; /** TASON 类型名及别名中的数值标量类型名 */ export declare const NUMBER_TYPE_NAMES: Set; /** * Handling 解析上下文。 * 序列化:C# `ValueScope` — OT 成员路径上 `object-type-property` ≈ all。 * 反序列化:`object-fallback-all` 在 OT 成员路径上无契约时 ≈ all。 */ export interface NumberHandlingContext { /** 当前值处于 ObjectTypeInstance 成员(含其内数组/嵌套 plain object) */ inObjectType?: boolean; } /** 无契约时的有效序列化策略 */ export type EffectiveSerializeNumberHandling = "unsafe-only" | "all" | "none"; /** 无契约时的有效反序列化策略 */ export type EffectiveDeserializeNumberHandling = "native" | "all"; export declare function resolveSerializeNumberHandling(handling: SerializeNumberHandling, ctx?: NumberHandlingContext): EffectiveSerializeNumberHandling; export declare function resolveDeserializeNumberHandling(handling: DeserializeNumberHandling, ctx?: NumberHandlingContext): EffectiveDeserializeNumberHandling; export declare function isNumberTypeName(name: string): boolean; export declare function isNumberWrapper(value: unknown): value is INumber; /** * 按反序列化选项对数值 TypeInstance 拆箱。 * 非数值类型原样返回。 */ export declare function unwrapNumberInstance(value: unknown, handling: DeserializeNumberHandling, ctx?: NumberHandlingContext): unknown; export declare function isSafeIntegerBigInt(value: bigint): boolean; /** Decimal 能否无损表示为 JS number(用于 unsafe-only 是否裸写) */ export declare function isDecimalSafeAsNumber(value: Decimal): boolean; /** * serialize `unsafe-only`:尽量写成 **number 字面量**(含 safe bigint)。 * - 包装类拆到 `.value` 再判断 * - Decimal 仅在可无损转为 number 时裸写 * - 无法安全表示时返回 null → 调用方写 TypeName */ export declare function trySerializeNumberAsSafeNumberLiteral(value: unknown): string | null; /** * serialize `none`:**强制**裸字面量(含超大 bigint、超精度 Decimal;精度/范围风险由用户承担)。 * 对已知数值形态应总能返回字符串;未知类型返回 null。 */ export declare function trySerializeNumberAsLiteral(value: unknown): string | null;