Typescript 具有动态字段名的类型化Zod组合器

Typescript 具有动态字段名的类型化Zod组合器,typescript,zod,Typescript,Zod,My XML to JSON库为一个元素列表发出{MyKey:T},为多元素列表发出{MyKey:T[]}。相应的类型脚本类型是类型XmlJsonArray=Record。我使用以下方法将其实现为Zod模式: constxmljsonarray=(元素:元素,模式:z.schema)=>{ //TODO这里的惯用方法是什么? 常量outerSchema:Record={}如有; outerSchema[element]=z.union([schema,z.array(schema)]; 返回z.

My XML to JSON库为一个元素列表发出
{MyKey:T}
,为多元素列表发出
{MyKey:T[]}
。相应的类型脚本类型是
类型XmlJsonArray=Record
。我使用以下方法将其实现为Zod模式:

constxmljsonarray=(元素:元素,模式:z.schema)=>{
//TODO这里的惯用方法是什么?
常量outerSchema:Record={}如有;
outerSchema[element]=z.union([schema,z.array(schema)];
返回z.object(outerSchema);
};
有没有一种方法可以不使用
任何

通过:

类型推断也有效:

const XmlJsonArray = <Key extends string, Schema extends z.Schema<any>>(
  element: Key,
  schema: Schema,
) => {
  return z.object({}).setKey(element, z.union([schema, z.array(schema)]));
};

const test = XmlJsonArray('asdf', z.string());
// both work
test.parse({ asdf: 'hello' });
test.parse({ asdf: ['hello'] });