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

如何在TypeScript中利用对象的另一个键定义该对象键的类型?

问题描述

我定义了如下TypeScript类型签名:

import { z, ZodObject, ZodRawShape } from 'zod';

export type DefinitionObject<T extends ZodRawShape> = {
  validator: ZodObject<T>;
  htmlFn: (value: z.infer<typeof validator> & { locale?: string; }) => JSX.Element;
};

想要让htmlFn的参数类型依赖同对象中validator的类型,但TypeScript抛出两个错误:

Cannot find name 'validator'.ts (2304)
Parameter 'value' of exported function has or is using private name 'validator'.ts (4078)

需要在类型签名里实现类似this.validator的关联效果,该怎么处理?

解决方案

问题出在你试图在类型上下文里直接引用对象属性名validator,TypeScript不支持这种写法。不过你已经通过泛型T约束了ZodRawShape,而validator的类型是ZodObject<T>,所以可以直接用z.infer<ZodObject<T>>来获取validator对应的推断类型,替代z.infer<typeof validator>即可。

修正后的代码如下:

import { z, ZodObject, ZodRawShape } from 'zod';

export type DefinitionObject<T extends ZodRawShape> = {
  validator: ZodObject<T>;
  htmlFn: (value: z.infer<ZodObject<T>> & { locale?: string; }) => JSX.Element;
};

这样htmlFn的参数类型就会和validator的类型自动关联——当你传入不同的ZodObject作为validator时,value的类型会自动对应validator的推断结果,同时保留额外的locale可选属性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 19:51:53