ty

2025-07-06

python

但愿苍生俱饱暖,不辞辛苦出山林。一一于谦

https://github.com/astral-sh/ty

@astral-sh/ty:用 TypeScript 类型轻松描述和验证你的数据

在现代 JavaScript/TypeScript 项目中,“类型安全”越来越被开发者所重视。无论是前端表单数据校验、API 请求参数校验,还是后端服务的数据类型约束,都需要灵活而强大的“类型系统”来守护。@astral-sh/ty 正是为此而生的下一代类型描述与数据验证工具。


一、什么是 @astral-sh/ty?

@astral-sh/ty 是由 Astral 团队推出的一个极简、强类型、适配 TypeScript 的运行时类型声明和验证库。它的目标是让你可以用 TypeScript 风格的语法声明类型,并在运行时校验数据结构是否符合预期,从而在开发与生产环境中都获得类型安全的保障。


二、核心特性

  • TypeScript 风格 API
    通过链式 API 声明类型,代码直观、类型推断强大。
  • 运行时类型校验
    不止“编译时”安全,能在运行时对任意数据做结构校验和类型断言。
  • 与 TypeScript 类型系统深度融合
    声明的 Ty 类型自动生成 TypeScript 类型,无需重复书写类型定义。
  • 丰富的类型描述能力
    支持基础类型、对象、数组、枚举、联合类型、嵌套类型等常见场景。
  • 极简依赖,易于扩展
    零依赖设计,适合各种大小的项目。

三、快速上手

安装依赖:

1
npm install @astral-sh/ty

1. 声明类型结构

1
2
3
4
5
6
7
8
import { ty } from '@astral-sh/ty';

const User = ty.object({
id: ty.number,
name: ty.string,
email: ty.string.optional(),
roles: ty.array(ty.string),
});

2. 类型推断

直接获得 TypeScript 类型:

1
2
3
type UserType = typeof User.type;
// 等价于
// type UserType = { id: number; name: string; email?: string; roles: string[] }

3. 运行时校验

1
2
3
4
5
6
7
8
9
const data = {
id: 1,
name: 'VampireAchao',
email: 'hi@example.com',
roles: ['admin', 'user'],
};

const result = User.check(data); // true/false
const parsed = User.parse(data); // 返回解析好的数据或抛出错误

四、与其它类型校验库对比

  • 与 Zod/TypeBox 等库类似,但 @astral-sh/ty 更关注与 TypeScript 类型系统的无缝集成,API 更贴近 TS 本身的语法习惯。
  • 极简设计,易于学习,文档清晰,适合快速上手和中小型项目。
  • 零依赖、现代语法,适配 ESM/CJS,适合现代 Node.js 和前端构建流程。

五、典型应用场景

  • API 参数/返回数据校验
  • 表单数据结构验证
  • 后端服务或中间件类型安全
  • 配置文件/环境变量校验
  • 自动生成文档/类型声明

六、社区与生态


七、总结

@astral-sh/ty 是 TypeScript 时代数据结构声明与验证的极佳选择。它让你用 TS 风格声明类型、推断类型、运行时校验一步到位,让“类型安全”从编译期延伸到运行期。无论你是前端、后端还是全栈开发者,想提升类型安全和开发效率,都值得一试!