@decs/typeschema

中文文档
0.12.2发布于 2024/01/21MITTypeScriptESM + CJS零依赖近 30 天下载 1.4万

用于设计验证的通用适配器

此软件包已被标记为弃用

TypeSchema has been restructured. Install @typeschema/main or @typeschema/all instead.

中文使用文档
文档目录6 节
  1. 特征
  2. 使用量
  3. 覆盖范围
  4. 设置
  5. API 密码
  6. 鸣谢

TypeSchema

类型方案

✨ https://typeschema.com (中文(简体) ) ✨
用于设计验证的通用适配器


License Bundle size npm downloads GitHub stars

设置   二. 支助   API 密码   二. 支助   覆盖范围   二. 支助   GitHub 图像   二. 支助   无   二. 支助   德诺


许多图书馆依赖于某种类型的验证. 他们的维护者可以选择:

  1. ⁠执行自己的 验证逻辑:这会导致更多的代码需要维护,我们那里已经有许多好的解决方案(例如. zod, (中文(简体) ), arktype, (中文(简体) ), typia(中文(简体) )
  2. 两人的密码 带有特定验证库: 限制使用另一个软件的开发者采用
  3. 支持多个 验证库:这是不断更新(如. tRPC 主题(中文(简体) )

因为总有取舍,所以没有最好的验证库. 每个开发者选择对他们最有意义的库. TypeSchema通过方便提供选项3来解决这个问题: 支持多个校验库外出.

特征

  • 从计划验证库解析
  • 小客户足迹,可树摇
  • 方便使用,最小API

使用量

import type {Infer, InferIn, Schema} from '@decs/typeschema';
import {assert, validate, wrap} from '@decs/typeschema';

// Use your favorite validation library, e.g. `zod`, `arktype`, `typia`
const schema: Schema = z.string();
const schema: Schema = type('string');
const schema: Schema = typia.createAssert<string>();

// Extracts the schema type
type Output = Infer<typeof schema>; // `string`
type Input = InferIn<typeof schema>; // `string`

// Returns the wrapped schema with access to all its operations
const wrapped = wrap(schema);
await wrapped.validate('123'); // {success: true, data: '123'}
await wrapped.assert('123'); // '123'

// Returns the validated data or a list of `ValidationIssue`s
await validate(schema, '123'); // {success: true, data: '123'}
await validate(schema, 123); // {success: false, issues: [`ValidationIssue`]}

// Returns the validated data or throws an `AggregateError`
await assert(schema, '123'); // '123'
await assert(schema, 123); // throws `AggregateError`

tRPC 主题

您可以使用任何支持的计划 tRPC 主题 通过 wrap 函数 :

import {wrap} from '@decs/typeschema';
import {initTRPC} from '@trpc/server';
import {object, string} from 'valibot';

// Use your favorite validation library, e.g. `valibot`
const schema = object({name: string()});

const t = initTRPC.create();
const appRouter = t.router({
  hello: t.procedure
    .input(wrap(schema)) // like this
    .query(({input}) => `Hello, ${input.name}!`),
});

覆盖范围

TypeSchema 支持所有主要的计划验证库 :

项目大众性wrapvalidate
assert
InferInferIn示例计划
佐德语GitHub stars✅✅✅✅z.string()
对GitHub stars✅✅✅✅string()
乔伊GitHub stars✅✅❌❌Joi.string()
页:1GitHub stars✅✅❌❌{type: "string"}
超级结构GitHub stars✅✅✅❌string()
io-ts(双胞胎)GitHub stars✅✅✅✅t.string
华丽机器人GitHub stars✅✅✅✅string()
类型框GitHub stars✅✅✅✅Type.String()
伤寒GitHub stars✅✅✅✅typia.createAssert<string>()
呜[^1]GitHub stars✅✅✅✅ow.string
效果GitHub stars✅✅✅✅S.string
方舟类型GitHub stars✅✅✅✅type('string')
深层GitHub stars✅✅❌❌typeOf<string>()
运行类型GitHub stars✅✅✅✅String

[^1]:用于 呜,仅支持 v0.28.2 (sindresorhus/ow#248)

自定义验证也被支持 :

export function assertString(data: unknown): string {
  if (typeof data !== 'string') {
    throw new Error('Expected a string, got: ' + data);
  }
  return data;
}

await validate(assertString, '123'); // {success: true, data: '123'}
await validate(assertString, 123); // {success: false, issues: [`ValidationIssue`]}

await assert(assertString, '123'); // '123'
await assert(assertString, 123); // throws `AggregateError`

设置

用您选择的软件包管理器安装 TypeSchema :

无 npm install @decs/typeschema
雅伦 yarn add @decs/typeschema
小时 pnpm add @decs/typeschema
德诺 https://deno.land/x/typeschema

API 密码

类型

  • Schema

    计划通用接口
    由所有支持的图书馆组成的计划类型联盟

  • TypeSchema<TOutput, TInput = TOutput>

    包扎图的接口,显示其所有操作

  • Infer<TSchema extends Schema>

    提取图案的输出类型

  • InferIn<TSchema extends Schema>

    提取策略的输入类型

  • ValidationIssue

    验证问题通用接口
    包括a message 和可选 path

职能

  • wrap(schema)

    wrap<TSchema extends Schema>(
      schema: TSchema,
    ): TypeSchema<Infer<TSchema>, InferIn<TSchema>>
    

    返回可访问其所有操作的包裹计划

  • validate(schema, data)

    validate<TSchema extends Schema>(
      schema: TSchema,
      data: unknown,
    ): Promise<ValidationResult<Infer<TSchema>>>
    

    返回已验证的数据或列表 ValidationIssue编号

  • assert(schema, data)

    assert<TSchema extends Schema>(
      schema: TSchema,
      data: unknown,
    ): Promise<Infer<TSchema>>
    

    返回已验证的数据或丢出一个 AggregateError

鸣谢

版本与发布记录

@decs/typeschema 共发布 42 个版本,首次发布于 2023/07/02;过去 12 个月发布了 0 个版本。

版本发布日期距今
0.12.2latest2024/01/212 年前
0.12.12023/10/143 年前
0.12.02023/10/053 年前
0.11.72023/09/233 年前
0.11.52023/09/233 年前
0.11.32023/09/233 年前

关于 @decs/typeschema 的常见问题

@decs/typeschema 是什么?

用于设计验证的通用适配器注意:该包已被作者标记为弃用——TypeSchema has been restructured. Install @typeschema/main or @typeschema/all instead.

如何安装 @decs/typeschema?

在项目目录运行 npm install @decs/typeschema,或使用 pnpm add / yarn add / bun add。

@decs/typeschema 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@decs/typeschema 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@decs/typeschema 可以商用吗?

@decs/typeschema 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@decs/typeschema 的下载量有多少?

根据 npm 官方下载统计,@decs/typeschema 在 2026/10/12 – 2026/11/10 这 30 天内被下载 13,603 次,日均约 453 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@decs/typeschema 还在维护吗?

最新版本 0.12.2 发布于 2024/01/21(2 年前);至今共发布 42 个版本,其中过去 12 个月发布了 0 个;首次发布于 2023/07/02。作者已将其标记为弃用,新项目建议寻找替代方案。