结合本项目 · global-flight-distribution(Next.js / TypeScript BFF)
connectors/types.ts + 转换层 shared/*normalizer,不需要深学 Java 语法。
src/server/api/connectors/
调用 Java 后端服务。你写 TS,但对方的类型、方法名、返回值全是 Java 来的。
global-flight-distributors
只作为确认业务口径的参考代码来读。严禁调用(AGENTS.md 硬性边界)。
所以几乎不用「写 Java」,主要工作是读 Java → 把类型和业务口径写到 TS 这边。
| Node / TS | Java(HSF / 旧后端) | 在本项目里的含义 |
|---|---|---|
| import 的 npm 函数 | HSF service 的 method | connectors/types.ts 每个 method 对应一个 Java 方法 |
| REST endpoint + JSON | HSF(接口全限定名 + 版本 做 RPC) | service id = 接口FQN:版本,见 connectors.ts |
interface { } | Java DTO / POJO | Java 一串 getXxx() = TS 的一个字段 |
null / undefined | Java null(Integer vs int) | 包装类型(Integer/Long)会来 null,基本类型(int/long)不会 |
number | int / long / BigDecimal | long 在 JS 会丢精度,金额 / ID 一律用字符串 |
字符串 enum | Java enum(序号或 name) | 用 enums.ts 锁口径;Java 给的是数字还是 name 先确认 |
| try / catch | Java 异常 + 返回的 ResultDO | 错误常常是返回值里的状态字段,不是抛异常 |
| Promise | Java 同步方法 | HSF 本身同步,TS 这边包成 Promise |
private Long orderId; getOrderId() → 读成 orderId: string(long 用 string)。com.fliggy.global.flight.distributors.client.xxx 只是旧后端位置,不是新系统可调 provider。ResultDO<T> 模式。result.ts / errors.ts 的来源。connectors/shared/*-normalizer.ts。你写代码主要在两端:request-builder(TS → Java 入参)和 normalizer(Java 出参 → TS)。中间的 Java 实现只读不碰。
number 接会坏。在边界 mapper 里转 string。
Long 最大值 ≈ 9.2×10¹⁸,JS Number.MAX_SAFE_INTEGER ≈ 9×10¹⁵,差了 1000 倍。订单号一般 16~18 位,必出问题。mw hsf 查原文(docs/hsf-query-guide.md),不要按 Java 习惯「应该是这样」去填。com.fliggy.global.flight.distributors.client.* 只是参考,不是可调 provider。coercion.ts。src/server/api/connectors/types.tsdocs/hsf-query-guide.mdconnectors/shared/order-normalizer.ts 等