StefanTerdell / zod-to-json-schema

Converts Zod schemas to Json schemas
ISC License
886 stars 71 forks source link

Type definition misconfigured #106

Open wataruoguchi opened 7 months ago

wataruoguchi commented 7 months ago

First of all, thank you for creating the module!

I started using your zod-to-json-schema and json-schema-to-zod. While the code looks to be working, my VSCode displays errors.

"json-schema-to-zod": "^2.0.14",
"typescript": "^5.3.3",
"zod": "^3.22.4",
"zod-to-json-schema": "^3.22.4"
import { jsonSchemaToZod } from "json-schema-to-zod";
import { z } from "zod";
import { zodToJsonSchema } from "zod-to-json-schema";

const testSchema = z.object({
  name: z.string(),
  age: z.number().optional(),
});
const jsonSchema = zodToJsonSchema(testSchema);
const zodSchema = jsonSchemaToZod(jsonSchema);  // <-- 1st type error with "jsonSchema"
console.log({
  jsonSchema,
  zodSchema,
  properties: jsonSchema.properties,  // <-- 2nd type error with "properties"
});
Screenshot 2024-02-22 at 8 07 56 PM

The result of the console.log is below:

Screenshot 2024-02-22 at 8 08 28 PM

The variable jsonSchema has properties that JsonSchemaObject type expects in json-schema-to-zod.

StefanTerdell commented 7 months ago

Hi, thanks for opening an issue.

The first problem is valid. jsonSchemaToZod should accept the output types of zodToJsonSchema. I will look into this... at some point. ;)

The second problem (the "missing" properties) is not a bug. The output will not have inference, like the Zod schema does (meaning the return type just says that it's a JSON Schema, not what the schema contains). Since not all JSON Schemas have "properties" you have to check for it manually.