glideapps/quicktype

converting a recursive json schema into a zod type breaks

已關閉

#2,508 建立於 2024年2月16日

 (1 則留言) (0 個反應) (0 位負責人)TypeScript (968 個分叉)batch import
TS Zodbuggood first issueinput:JSON Schema

倉庫指標

星標
 (10,867 顆星)
PR 合併指標
 (30 天內沒有已合併 PR)

描述

example self referential schema:

{
  "id": "http://json-schema.org/geo",
  "$schema": "http://json-schema.org/draft-06/schema#",
  "description": "A geographical coordinate",
  "type": "object",
  "definitions":{
    "Mydef1":{
        "type":"object",
        "properties":{
            "test":{
                "$ref":"#/definitions/Mydef1"
            }
            
        }
    }
  },
  "properties": {
    "latitude": {
       "$ref":"#/definitions/Mydef1"
    }
  }
}

produces:

export const Mydef1Schema = z.object({
    "test": z.union([Mydef1Schema, z.null()]).optional(),
});
export type Mydef1 = z.infer<typeof Mydef1Schema>;

export const CoordinateSchema = z.object({
    "latitude": z.union([Mydef1Schema, z.null()]).optional(),
});
export type Coordinate = z.infer<typeof CoordinateSchema>;

but it should be https://github.com/colinhacks/zod#recursive-types

=> z.lazy(() => Mydef1Schema)

export const Mydef1Schema = z.object({
    "test": z.union([z.lazy(() =>Mydef1Schema), z.null()]).optional(),
});
export type Mydef1 = z.infer<typeof Mydef1Schema>;

export const CoordinateSchema = z.object({
    "latitude": z.union([Mydef1Schema, z.null()]).optional(),
});
export type Coordinate = z.infer<typeof CoordinateSchema>;

貢獻者指南