You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ServiceNow项目Query方法TypeScript类型定义嵌套字段问题求助

ServiceNow项目中TypeScript关联表字段类型定义问题

我正在做一个ServiceNow项目,项目对开发者体验(DX)关注较少,因此希望添加TypeScript类型定义以减少错误。

项目中通过类操作数据库表的语法为new Query("table").where("field", fieldValue),其中fieldValue的类型取决于字段类型。我已成功提取表信息并存储到TypeScript文件中。

此外,还支持通过new Query("table").where("ref.otherField", fieldValue)的方式访问关联表字段。由于类型可能无限嵌套(例如用户表的manager字段又指向用户表),我仅打算支持最多两层关联字段,超出则使用any类型。

我的目标是创建包含所有可能字符串及对应值的类型,用于where方法。为此编写了AppendPrefix类型为关联表字段添加前缀:

type AppendPrefix<prefix extends string, Object extends Record<string, any>> = {
    [key in `${prefix}.${keyof Object}`]: key extends `${prefix}.${infer Field}`
    ? Object[Field] extends Reference<any>
    ? sys_id | null
    : Object[Field]
    : never;
};

该类型针对单个前缀和表能正常工作,但处理两个不同表的字段时,仅会保留两张表的重叠字段(比如两张表都有name字段时,会生成"prefix1.name": string;和"prefix2.name": string;)。

我尝试通过以下方式获取所有带前缀的类型:

type AddReferenceTable<Table extends keyof Tables.List, Field extends keyof Tables.List[Table]> = AppendPrefix<
    Field,
    GetReferenceTable<Table, Field>
>;

type GetReferenceTable<
    Table extends keyof Tables.List,
    Field extends keyof Tables.List[Table]
> = Tables.List[Table][Field] extends Reference<infer T>
    ? Tables.List[T]
    : never;

请问我哪里出错了?或者我的解决思路不佳,有更好的实现方式吗?


内容的提问来源于stack exchange,提问作者QuantumZero

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 04:33:08