node.js - Ο πάροχος τύπου json-schema-to-ts του Fastify δεν λειτουργεί
Προσπαθώ να υλοποιήσω συμπερασμό τύπων από το JSON schema στο Fastify.
Αυτό το παράδειγμα από την τεκμηρίωση δεν λειτουργεί για μένα, καθώς το request.query παραμένει άγνωστο ή μερικές φορές {}.
Εδώ είναι ένα άμεσο αντιγραφή-επικόλληση της τεκμηρίωσης στο stackblitz. Όπως μπορείτε να δείτε, η μεταγλώττιση του Typescript αποτυγχάνει.
Κάποια ιδέα;
Απάντηση #1
Ο τύπος Querystring δεν έχει οριστεί, γι' αυτό προκύπτει το σφάλμα. Για να τον ορίσετε κάντε το εξής:
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!
}
);
Ή, για να το κρατήσετε DRY, εγκαταστήστε το πακέτο @sinclair/typebox και ορίστε το εκ των προτέρων όπως:
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!
}
);
Απάντηση #2
αυτό λύνει το πρόβλημα (:
npm i json-schema-to-ts
