如何用Zod使用并验证第三方GeoJson类型?
解决方案
1. 使用现成的GeoJson Zod Schema库
不用手动实现GeoJson的类型校验逻辑,直接用社区维护的zod-geojson库——它已经把所有GeoJson类型对应的Zod Schema封装完成,直接导入复用即可。
安装库:
npm install zod-geojson # 或用yarn yarn add zod-geojson
代码示例:
import { z } from "zod"; import { PointSchema } from "zod-geojson"; // 直接复用PointSchema定义你的接口对应的Zod Schema const SomeInterfaceSchema = z.object({ id: z.string(), label: z.string(), point: PointSchema, }); // 解析数据时直接使用该schema const parsedData = SomeInterfaceSchema.parse(yourRawData);
2. 手动封装通用的GeoJson Zod Schema
如果不想引入第三方库,可以把GeoJson核心类型对应的Zod Schema只编写一次,之后在所有需要的地方直接引用。
比如创建一个geoJsonSchemas.js文件统一维护:
import { z } from "zod"; // 定义GeoJson Point的Schema export const GeoJsonPointSchema = z.object({ type: z.literal("Point"), coordinates: z.tuple([z.number(), z.number()]).or(z.tuple([z.number(), z.number(), z.number()])), }); // 按需扩展其他GeoJson类型,比如Polygon export const GeoJsonPolygonSchema = z.object({ type: z.literal("Polygon"), coordinates: z.array(z.array(z.tuple([z.number(), z.number()]))), });
在业务代码中导入复用:
import { z } from "zod"; import { GeoJsonPointSchema } from "./geoJsonSchemas"; const SomeInterfaceSchema = z.object({ id: z.string(), label: z.string(), point: GeoJsonPointSchema, }); // 校验数据 const validatedData = SomeInterfaceSchema.parse(rawData);
以上两种方式都能避免重复编写GeoJson相关的Zod Schema,只需要维护一份核心定义,所有用到的地方直接引用即可。
内容的提问来源于stack exchange,提问作者zaplec
相关产品推荐
相关产品推荐

