336 words
2 minutes
[Effect Schema] 02. 定义Schema

定义Schema#

目标:检查值是否符合预定义的规则集

我们可以定义一个代表所需数据的结构,而不是为每个参数使用 if/else。这就是 Schema 的全部意义!

Effect Schema 是 effect 内部的一组 API,允许基于 Schema 对数据进行解码和编码。

Schema 从 版本 3.10 开始成为 effect 核心的一部分(课程更新提交)。

如果你使用的是较旧版本的 effect,你需要安装单独的 @effect/schema 包。

主要变化是之前从 @effect/schema 导出的所有模块现在直接从 effect 导出:

import {
  Arbitrary,
  AST,
  SchemaAST,
  FastCheck,
  JSONSchema,
  ParseResult,
  Pretty,
  Schema
} from "@effect/schema"
} from "effect"

本课程中 Effect playground 的链接仍在使用旧的 @effect/schema 包。

在底层,Schema 会检查数据是否符合我们定义的每个规则,或者报告出错的详细错误

在实践中,Schema 看起来像一个更强大的 TypeScript interface

我们可以定义一个 Schema,而不是定义普通的 TypeScript interface

interface Pokemon {
  id: number;
  order: number;
  name: string;
  height: number;
  weight: number;
}

我们使用 Schema 创建一个表示相同结构的值:

  • Schema.Struct:具有属性的对象的 Schema
  • Schema.Numbernumber 类型的 Schema
  • Schema.Stringstring 类型的 Schema
import { Schema } from "effect";

const PokemonSchema = Schema.Struct({
  id: Schema.Number,
  order: Schema.Number,
  name: Schema.String,
  height: Schema.Number,
  weight: Schema.Number,
});

这看起来与普通的 interface 非常相似,不是吗?

[Effect Schema] 02. 定义Schema
https://0bipinnata0.my/posts/course/effect-beginners-complete-getting-started/effect-schema/02-defining-a-schema/
Author
0bipinnata0
Published at
2025-08-30 17:03:06