node.js - Le fournisseur de types Fastify json-schema-to-ts ne fonctionne pas
J'essaie d'implémenter l'inférence de type à partir du schéma JSON dans Fastify.
Cet exemple tiré de la documentation ne fonctionne pas pour moi, car request.query reste inconnu ou parfois {}.
Voici une copie conforme de la documentation sur stackblitz. Comme vous pouvez le voir, la compilation TypeScript échoue.
Une idée ?
Réponse #1
Le type Querystring n'est pas défini, d'où l'erreur. Pour le définir, faites comme suit :
import { JsonSchemaToTsProvider } from '@fastify/type-provider-json-schema-to-ts';
import fastify from 'fastify';
const server = fastify().withTypeProvider<JsonSchemaToTsProvider>();
server.get<{ Querystring: { foo: number, bar: string } }>(
'/route',
{
schema: {
querystring: {
type: 'object',
properties: {
foo: { type: 'number' },
bar: { type: 'string' },
},
required: ['foo', 'bar'],
},
} as const, // don't forget to use const !
},
(request, reply) => {
const { foo, bar } = request.query; // type safe!
}
);
Ou, pour rester DRY, installez le paquet @sinclair/typebox et définissez-le à l'avance comme :
import { JsonSchemaToTsProvider } from '@fastify/type-provider-json-schema-to-ts';
import fastify from 'fastify';
import { Static, Type } from '@sinclair/typebox';
const server = fastify().withTypeProvider<JsonSchemaToTsProvider>();
const getQuerystring = Type.Object({
foo: Type.Number(),
bar: Type.String(),
})
type GetQuerystring = Static<typeof getQuerystring>
server.get<{ Querystring: GetQuerystring }>(
'/route',
{
schema: {
querystring: getQuerystring,
} as const, // don't forget to use const !
},
(request, reply) => {
const { foo, bar } = request.query; // type safe!
}
);
Réponse #2
cela résout le problème (:
npm i json-schema-to-ts
