node.js - El proveedor de tipos json-schema-to-ts de Fastify no funciona
Estoy intentando implementar la inferencia de tipos a partir de un esquema JSON en Fastify.
Este ejemplo de la documentación no funciona para mí, ya que request.query sigue siendo desconocido o a veces {}.
Aquí hay una copia directa y pegada de la documentación en stackblitz. Como puedes ver, la compilación de Typescript falla.
¿Alguna idea?
Respuesta #1
El tipo Querystring no está definido, de ahí el error. Para definirlo, haz lo siguiente:
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!
}
);
O, para mantenerlo DRY, instala el paquete @sinclair/typebox y defínelo de antemano así:
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!
}
);
Respuesta #2
esto resuelve el problema (:
npm i json-schema-to-ts
