使用typescript类验证程序进行(嵌套)索引签名

使用typescript类验证程序进行(嵌套)索引签名,typescript,class-validator,Typescript,Class Validator,我想验证(使用类验证器)具有索引签名的类: 类示例{ myProp:{[foo:string]:string} } 我想确定myProp.something和myProp.somethingles实际上是字符串,而不是数字、对象、数组 你知道怎么做吗 一种方法是使用单独的类anIsString(),如下所示: 类MyProp{ @IsString() [foo:string]:字符串 } 课例{ @IsDefined() @ValidateNested() myProp:myProp } 但

我想验证(使用
类验证器
)具有索引签名的类:

类示例{
myProp:{[foo:string]:string}
}
我想确定myProp.something和myProp.somethingles实际上是字符串,而不是数字、对象、数组

你知道怎么做吗

一种方法是使用单独的类an
IsString()
,如下所示:

类MyProp{
@IsString()
[foo:string]:字符串
}
课例{
@IsDefined()
@ValidateNested()
myProp:myProp
}
但是,typescript不会编译:
装饰符在这里无效。


实际上,我还想验证类型,比如
{[foo:string]:{[bar:string]:string}
。但让我们先从简单的例子开始;-)

因为decorator不能附加到索引签名(在运行时不存在),对于简单的情况

类示例{
@IsInstance(地图)
@IsString({each:true})
myProp:地图;
}

您拥有的代码片段确保了
myProp.something
包含字符串类型,那么您在这里要问什么?提供一个简单的示例将非常清楚。您是否尝试过
@IsString()
?我想你应该为decorators创建一个单独的类只是为了澄清一下,decorators只能添加到类中,所以
myProp
需要存储一个类,而不是像你尝试的那样在一个单独的类中存储一个接口。我得到的错误是“装饰器在这里无效”:(你能分享你的尝试吗?谢谢你的建议。但是,我不认为这是一个解决问题的方法,而是一个不同的问题;-)我想要验证一个传入的对象。您的回答验证了另一个对象,因此我必须首先转换该对象。转换一个对象只是为了验证它(然后再转换回来)对我来说没有多大意义。无论发生什么,你都必须转换它。但更重要的是,
类验证器
没有您想要的功能,所以唯一可以做的就是提出替代方案。