node.js - Fastify json-schema-to-ts ტიპის მიმწოდებელი არ მუშაობს
მინდე ვცადო JSON სქემიდან ტიპების ინფერენციის განხორციელება Fastify-ში.
ამ მაგალითი დოკუმენტაციიდან ჩემთვის არ მუშაობს, რადგან request.query რჩება unknown ან ზოგჯერ {}.
აქ არის პირდაპირი კოპირება-ჩასმა 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
