宣布 ArkType 2.0

100 倍更快的验证,令人惊叹的 DX

从今天起,arktype@2.0.0 已全面可用并完全稳定。

ArkType 2.0 以一种迄今为止只是梦想的方式,将类型引入运行时 JS。

无论您是首次尝试使用 TypeScript 验证表单的新手开发者,还是库作者在自省关系,ArkType 都提供了根本上更好的工具,来应对 JavaScript 的种种危险。

Loading playground...

Type-level feedback with each keystroke- no plugins or build steps required.

无与伦比的 DX

您已经熟悉的类型语法,带有前所未有的安全性和补全功能

const  = type({
	name: "string",
	platform: "'android' | 'ios'",
	"version?": "number | s
  • number | string
  • number | symbol
"
})

更快……一切

运行时比 Zod 快 100 倍,编辑器性能将让您回想起自动补全本该有的感觉

Object Validation, Node v23.6.1
(source)
ArkType ⚡ 14 nanoseconds
   Zod 👍 281 nanoseconds
   Yup 🐌 40755 nanoseconds*
*scaling generously logarithmized

清晰与简洁

定义长度减半,类型错误的可读性加倍,悬停提示只显示真正重要的事项

// hover me
const  = type({
	name: "string",
	platform: "'android' | 'ios'",
	"versions?": "number | string)[]"
TypeScript: Unmatched ) before [] 
})

更好的错误

深度可自定义的消息,带有优秀的默认值

const  = User({
	name: "Alan Turing",
	platform: "enigma",
	versions: [0, "1", 0n]
})

if ( instanceof type.errors) {
	// hover summary to see validation errors
	console.error(.)
}

深度自省能力

ArkType 使用集合论来理解并暴露您的类型之间的运行时关系,就像 TypeScript 在编译时所做的那样

.extends("object") // true
.extends("string") // false
// true (string is narrower than unknown)
.extends({
	name: "unknown"
})
// false (string is wider than "Alan")
.extends({
	name: "'Alan'"
})

内在优化

每个模式都会在内部被规范化并简化为其最纯净和最快的表示形式

// all unions are optimally discriminated
// even if multiple/nested paths are needed
const  = type({
	kind: "'admin'",
	"powers?": "string[]"
}).or({
	kind: "'superadmin'",
	"superpowers?": "string[]"
}).or({
	kind: "'pleb'"
})

接下来呢?

ArkType 不需要特殊的运行环境或构建步骤即可工作——我们的入门 将让您在几秒钟内即可启动并运行。

我们有宏伟计划 来进一步提升 ArkType 2.0,但我们更期待看到您用它做什么!

开始编码

在 GitHub 上查看项目

👋 加入我们的 Discord 潜水或提问

  • 关注以下任何账户以获取更新:

  • 考虑支持我对 ArkType 的全职工作……

    • 通过 GitHub Sponsors
    • 通过说服您的团队让我优化您的类型并修复编辑器延迟(直接联系列出的任何账户或 david@arktype.io

On this page