SuperAPI AI 工具集

ArkType

编程与开发

查看项目

更新于 10-16 09:50

技能介绍

ArkType 是一个用于 TypeScript 的校验库,允许用与 TypeScript 类型定义非常相似的写法来校验值。本技能说明在编写 ArkType 校验逻辑时如何使用它。

安装:若项目依赖中尚无 ArkType,可用 npm install arktype 安装;若使用其他包管理器则改用对应命令。

基础用法:从 "arktype" 导入 type,用 type({...}) 定义对象类型,如 name: "string"、platform: "'android' | 'ios'"、email: "string.email"、score: "number.integer <= 100"、"versions?": "(number | string)[]",以及嵌套定义(嵌套无需再包一层)。可用 typeof User.infer 提取类型。调用 User(value) 得到结果,若 out instanceof type.errors 则用 out.summary 输出错误;User.assert(value) 在值无效时抛错;User.allows(value) 是类型守卫,不应用变形或转换。注意:对象类型默认允许并保留未声明属性,可用 "+": "reject" 拒绝或用 "+": "delete" 删除。

可选属性:可选属性不会隐式允许 undefined 作为值,例如 "name?": "string" 表示 name 可缺失,value: "string | undefined" 表示必填但可为 undefined,"label?": "string | undefined" 表示可缺失或显式 undefined。

约束:可用 .narrow() 添加非标准约束。

内置关键字:例如 type("string.url") 表示 URL 格式字符串,type("string.url.parse") 可在校验同时变形为 URL 对象。全部内置原始类型与关键字见文档 https://arktype.io/docs/keywords。

正则:可使用形如 "x/^(?<month>\d{2})-(?<day>\d{2})-(?<year>\d{4})$/" 的写法并获得完全类型安全的 groups。若只需类型安全正则,可用 arkregex 的 regex。

变形与 JSON:type("string").pipe((s) => s.trim()) 可做变形;type("string.json.parse").to({ version: "string.semver" }) 可解析 JSON 并校验。

递归类型:用 scope({...}) 定义 User 与 UsersById,再 userScope.export() 取得 userModule 使用。

从变量创建校验器与类型:需用 as const,再用 type.enumerated(...allowedValues) 得到枚举类型,并可 typeof AllowedValue.infer 推断类型。