You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 09:25:29