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

TypeScript中Mapped type提取嵌套属性实现类型扁平化报错怎么办

问题原因

你遇到的编译错误核心原因是泛型参数未添加类型约束:你定义的UIType<Schema>中,泛型参数Schema没有任何结构限制,TypeScript 静态检查时无法确认传入的类型每个属性下一定存在type字段,因此访问Schema[Key].type时会判定该属性无明确类型,触发隐式any的报错。

正确实现

只需要给泛型参数添加对应的结构约束,明确告知TS传入的Schema必须满足「每个属性值都包含type字段」的结构即可,代码如下:

// 定义Schema的基础结构约束
type SchemaConstraint = Record<string, { type: unknown }>

// 给泛型T加上extends约束,限制入参结构
type UIType<T extends SchemaConstraint> = {
  [K in keyof T]: T[K]['type']
}
效果验证

用你提供的Schema类型做测试:

type UserSchema = {
  name: {
    type: string
  }
  age: {
    type: number
  }
}

// 推导结果为 { name: string; age: number },完全符合预期
type FlatSchema = UIType<UserSchema>

此时不会再有任何编译报错,类型推导结果和你预期的扁平化结构完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 15:45:48