基本类型

string(字符串)

关键字

以下关键字可以在任何定义中引用,例如:

const  = ("string.email")

const  = ({
	data: "string.json.parse",
	ids: "string.uuid.v4[]"
})
AliasDescription
stringa string
string.alphaonly letters
string.alphanumericonly letters and digits 0-9
string.base64base64-encoded
string.base64.urlbase64url-encoded
string.capitalizea morph from a string to capitalized
string.capitalize.preformattedcapitalized
string.creditCarda credit card number and a credit card number
string.datea string and a parsable date
string.date.epochan integer string representing a safe Unix timestamp
string.date.epoch.parsea morph from an integer string representing a safe Unix timestamp to a Date
string.date.isoan ISO 8601 (YYYY-MM-DDTHH:mm:ss.sssZ) date
string.date.iso.parsea morph from an ISO 8601 (YYYY-MM-DDTHH:mm:ss.sssZ) date to a Date
string.date.parsea morph from a string and a parsable date to a Date
string.digitsonly digits 0-9
string.emailan email address
string.hexhex characters only
string.integera well-formed integer string
string.integer.parsea morph from a well-formed integer string to an integer
string.ipan IP address
string.ip.v4an IPv4 address
string.ip.v6an IPv6 address
string.jsona JSON string
string.json.parsesafe JSON string parser
string.lowera morph from a string to only lowercase letters
string.lower.preformattedonly lowercase letters
string.normalizea morph from a string to NFC-normalized unicode
string.normalize.NFCa morph from a string to NFC-normalized unicode
string.normalize.NFC.preformattedNFC-normalized unicode
string.normalize.NFDa morph from a string to NFD-normalized unicode
string.normalize.NFD.preformattedNFD-normalized unicode
string.normalize.NFKCa morph from a string to NFKC-normalized unicode
string.normalize.NFKC.preformattedNFKC-normalized unicode
string.normalize.NFKDa morph from a string to NFKD-normalized unicode
string.normalize.NFKD.preformattedNFKD-normalized unicode
string.numerica well-formed numeric string
string.numeric.parsea morph from a well-formed numeric string to a number
string.regexa string and a regex pattern
string.semvera semantic version (see https://semver.org/)
string.trima morph from a string to trimmed
string.trim.preformattedtrimmed
string.uppera morph from a string to only uppercase letters
string.upper.preformattedonly uppercase letters
string.urla string and a URL string
string.url.parsea morph from a string and a URL string to a URL instance
string.uuida UUID
string.uuid.v1a UUIDv1
string.uuid.v2a UUIDv2
string.uuid.v3a UUIDv3
string.uuid.v4a UUIDv4
string.uuid.v5a UUIDv5
string.uuid.v6a UUIDv6
string.uuid.v7a UUIDv7
string.uuid.v8a UUIDv8

字面量

const  = ({
	singleQuoted: "'typescript'",
	doubleQuoted: '"arktype"'
})

模式

正则表达式字面量指定了一个输入字符串必须匹配的、非锚定的正则表达式。

它们可以是字符串内嵌的,也可以直接引用一个 RegExp 实例。

const  = ({
	stringEmbedded: "/^a.*z$/",
	regexLiteral: /^a.*z$/
})

长度

使用包含性或排除性的最小或最大长度来约束字符串。

const  = ({
	nonEmpty: "string > 0",
	atLeastLength3: "string.alphanumeric >= 3",
	lessThanLength10: "string < 10",
	atMostLength5: "string <= 5"
})

范围表达式允许您同时指定最小和最大长度,并使用相同的语法来表示排除性。

const  = ({
	nonEmptyAtMostLength10: "0 < string <= 10",
	integerStringWith2To5Digits: "2 <= string.integer < 6"
})

number(数字)

关键字

以下关键字可以在任何定义中引用,例如:

const  = ({
	createdAt: "number.epoch",
	age: "number.integer >= 0"
})
AliasDescription
numbera number
number.InfinityInfinity
number.NaNNaN
number.NegativeInfinity-Infinity
number.epochan integer representing a safe Unix timestamp
number.integeran integer
number.safeat least -9007199254740991 and at most 9007199254740991

字面量

const  = ({
	number: "1337"
})

范围

使用包含性或排除性的最小值或最大值来约束数字。

const  = ({
	positive: "number > 0",
	atLeast3: "number.integer >= 3",
	lessThanPi: "number < 3.14159",
	atMost5: "number <= 5"
})

范围表达式允许您同时指定最小值和最大值,并使用相同的语法来表示排除性。

const  = ({
	positiveAtMostE: "0 < number <= 2.71828",
	evenNumberAbsoluteValueLessThan50: "-50 < (number % 2) < 50"
})

除数

number 约束为指定整数的倍数。

const  = ({
	key: "number % 2"
})

bigint(大整数)

要允许任何 bigint 值,请使用 "bigint" 关键字。

const  = ({
	foo: "bigint"
})

字面量

要在类型中要求精确的 bigint 值,您可以在字符串内嵌的数字字面量后添加后缀 n,使其成为 bigint

const  = ({
	bigint: "1337n"
})

您也可以使用单元表达式来定义 bigint 字面量。

symbol(符号)

要允许任何 symbol 值,请使用 "symbol" 关键字。

const  = ({
	key: "symbol"
})

要在定义中引用特定的符号,请使用单元表达式

定义符号属性(如 { [mySymbol]: "string" })不需要特殊语法。关于如何将符号键与可选性等其他语法结合使用的更多信息和示例,请参阅属性

boolean(布尔值)

要允许 truefalse,请使用 "boolean" 关键字。

const  = ({
	key: "boolean"
})

字面量

要要求特定的布尔值,请使用相应的字面量。

const  = ({
	a: "true",
	b: "false",
	// 等同于 "boolean" 关键字
	c: "true | false"
})

null

"null" 关键字可用于允许精确值 null,通常作为联合类型的一部分。

const  = ({
	foo: "number | null"
})

undefined

"undefined" 关键字可用于允许精确值 undefined,通常作为联合类型的一部分。

const  = ({
	requiredKey: "number | undefined",
	"optionalKey?": "number | undefined"
})

允许 undefined 作为值并不会使键变为可选!

在 TypeScript 中,一个允许 undefined 的必需属性仍然必须存在,类型才能得到满足。

在 ArkType 中也是如此。

查看示例
const  = ({
	key: "number | undefined"
})

// 有效数据
const  = MyObj({ key: undefined })

// 错误:name 必须是数字或 undefined(实际缺失)
const  = MyObj({})

On this page