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
相关产品推荐
相关产品推荐

