TypeScript属性别名(Aliasing)实现遇到的类型问题
CQL封装工具别名功能的TypeScript类型修复
类型代码修改
替换原SelectResult及相关辅助类型为以下代码:
// 解析单个字段的别名与对应类型 type ResolveField<T> = T extends { as: infer Alias } ? Alias extends string ? { [K in Alias]: T['type'] } : never : T extends { name: infer FieldName } ? FieldName extends string ? { [K in FieldName]: T['type'] } : never : never; // 合并所有字段的解析结果 type SelectResult<Fields extends readonly any[]> = Fields extends [infer Head, ...infer Tail] ? ResolveField<Head> & SelectResult<Tail> : {};
效果说明
修改后:
- test1 返回类型正确推导为
{ number_alias: number, id_alias: string } - test2 返回类型正确推导为
{ numero: number, id_alias: string } - test3 原有正常推导逻辑不受影响
注意:保留代码中1作为数据库客户端模拟的部分,以及as unknown as ***的类型断言,仅修改上述类型定义即可。
内容的提问来源于stack exchange,提问作者Avangardio
相关产品推荐
相关产品推荐

