Zod推断类型未正确识别extends继承关系的问题咨询
Zod推断类型未正确识别extends继承关系的问题咨询
Hey,我看了你写的测试代码,猜你应该是碰到了Zod类型推断的小问题——明明用baseDataSchema.extend()扩展出了userSchema,但推断出来的User类型好像没正确识别和BaseData的继承关系?
先帮你理清楚这段代码的逻辑:
- 你定义了
dataIdSchema作为ID的校验规则,接着用它构建了包含必填id字段的baseDataSchema - 然后通过
extend()方法扩展出userSchema,新增了name字段 - 最后用
z.infer分别得到BaseData和User类型
正常情况下,User类型应该自动包含BaseData里的id属性,同时新增name属性。如果你的编辑器或类型检查工具没识别到这个继承关系,可能是这几个原因:
- Zod版本太旧:早期版本的Zod在
extend()的类型推断上可能存在bug,建议升级到最新稳定版试试 - 编辑器缓存作祟:像VS Code这类编辑器的TypeScript服务偶尔会缓存旧类型信息,你可以按
Ctrl+Shift+P调出命令面板,选择「Restart TypeScript Server」重启服务试试 - 可以试试显式继承验证:虽然你的写法没问题,但可以尝试显式让
User继承BaseData来验证,代码如下:
如果这样能正常识别,那大概率是当前环境下Zod类型推断的小问题export type User = BaseData & { name: string };
另外,你可以在代码里加个小测试验证类型是否正确:
const validUser: User = { id: 1, name: "Alice" }; // 这里如果编辑器没报错,说明User类型已经正确包含id和name字段 const invalidUser: User = { id: "1", // 这里应该报错,因为id必须是正整数 name: "Bob" };
如果还是有问题,不妨补充下你遇到的具体现象——比如是编辑器没提示错误、编译时类型检查不通过,还是其他情况?这样能更精准地帮你定位问题~
内容来源于stack exchange
相关产品推荐
相关产品推荐

