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

如何使用TypeScript模板字面量类型为Typeorm别名原始查询结果生成强类型

解决方案

你可以使用TypeScript 4.1以上版本支持的**键重映射(Key Remapping)**语法实现需求,核心思路是遍历User的原始键,仅在生成最终键名时拼接前缀,值类型直接用原始键索引User即可:

type RawUser = {
  [K in keyof User as `u_${K}`]: User[K]
}

如果需要适配不同前缀的场景,可以封装成通用的工具类型:

// 通用前缀添加工具类型
type AddPrefix<T, Prefix extends string> = {
  [K in keyof T as `${Prefix}${K}`]: T[K]
}

// 传入User和前缀u_生成目标类型
type RawUser = AddPrefix<User, 'u_'>

最终生成的RawUser类型等价于:

interface RawUser {
  u_id: string;
  u_name: string;
  u_age: number;
}

完全匹配TypeORM原始查询返回的带前缀的结构。

原写法错误原因

你之前的写法遍历的是已经拼接完成的u_${keyof User}联合类型,此时遍历出的K是'u_id' | 'u_name' | 'u_age',自然无法作为User类型的合法索引(User的键类型是'id' | 'name' | 'age')。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 02:54:01