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

