介绍

您的第一个类型

如果您已经了解 TypeScript,那么恭喜您——您刚刚学会了 ArkType 的大部分语法 🎉

Define

import { type } from "arktype"

const  = type({
	name: "string",
	platform: "'android' | 'ios'",
	"versions?": "(number | string)[]"
})

// 如需提取类型
type  = typeof .infer

如果您犯了错误,别担心——每个定义都会获得您从编辑器中习惯的自动补全和验证,全都在 TypeScript 的类型系统中。

ArkType 会崩溃我的 TypeScript 服务器吗?

数千小时的优化工作已投入其中,使验证原生类型语法不仅可行,而且通常比替代方案快得多 ⚡

Compose

假设我们想将 platformversion 从原始类型移动到新的 device 属性中。

const  = ({
	name: "string",
	// 嵌套定义无需包装
	device: {
		platform: "'android' | 'ios'",
		"versions?": "(number | string)[]"
	}
})

要将 deviceUser 解耦,只需将其移动到自己的类型中并引用它。

const  = ({
	platform: "'android' | 'ios'",
	"versions?": "(number | string)[]"
})

const  = ({
	name: "string",
	device: 
})

Validate

在运行时,我们可以将 unknown 数据传递给我们的类型,并返回验证后的 User 或一个包含根 summary 的清晰、可自定义的错误数组。

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

if ( instanceof type.errors) {
	// 将鼠标悬停在 out.summary 上查看验证错误
	console.error(.)
} else {
	// 将鼠标悬停在 out 上查看您的验证数据
	console.log(`Hello, ${.name}`)
}

就是这样!您现在知道如何定义一个 Type 并在运行时使用它来检查您的数据了。

接下来,我们将看看 ArkType 如何扩展 TypeScript 的类型系统来处理运行时约束,如 maxLengthpattern

On this page