我有一个看起来像这样的对象:
interface LotteryData {
PROP1: string;
PROP2: string;
PROP3: string;
PROP4: string;
PROP5: string;
}
interface LotterySuccess {
name: string;
data: Array<LotteryData>;
}
我的模式如下:
const successResponseSchema = S.object()
.title('About 200 response')
.description('Some description')
.prop('name', S.string())
.definition('data', S.array());
使用邮递员时,我会得到名字,但没有得到数据。
我也尝试过:
const successResponseSchema = S.object()
.title('About 200 response')
.description('Some description')
.prop('name', S.string())
.prop('data', S.anyOf([S.object()]));
这里的数据为空,我理解,因为我将数据发送回数组而不是对象。
处理请求的处理程序如下:
const handler = async (req, reply) => {
const responseData = await fileManager();
const response: LotterySuccess = {
name: responseData.Name,
data: responseData.Data,
};
reply.send(response);
};
export default (server: FastifyInstance) =>
server.get<null>('/', opts, handler);
responseData.Data具有正确的值,但是我无法使我的成功模式与之对应 对象数组。有什么想法吗?
答案 0 :(得分:2)
其中一个寻求几个小时,一旦您最后提出问题,您也会找到答案。
想保留这个问题,因为这不容易找到。 我通过反复试验弄清楚了这一点。
发现this会有所帮助。
我的最终解决方案:
const successResponseSchema = S.object()
.title('About 200 response')
.description('Some description')
.prop('name', S.string())
.prop(
'data',
S.array().items(
S.object()
.prop('PROP1', S.string())
.prop('PROP2', S.string())
)
);
说实话,我不认为这是涵盖所有内容的答案。我无法解释为什么必须这样。如果有人可以解释那部分,那就太好了。希望以后我可以更详细地更新此答案。
编辑: @Manuel Spigolon在评论中给出了一些指示。
以上更改为:
const successResponseSchema = S.object()
.title('About 200 response')
.description('Some description')
.prop('name', S.string())
.prop('data', S.array().items(S.object().additionalProperties(true)));
这样,我不必添加每个道具。