You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何定义可校验有效十六进制字符串的TypeScript类型?

如何定义支持任意长度的合法十六进制字符串TypeScript类型

要实现能校验长度为偶数且仅包含十六进制字符的ByteString类型,可以利用TypeScript的递归模板字符串类型来实现,以下是具体方案:

完整类型定义

// 枚举所有合法的十六进制字符(包含大小写)
type HexChar = '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' | 
               'a' | 'b' | 'c' | 'd' | 'e' | 'f' | 
               'A' | 'B' | 'C' | 'D' | 'E' | 'F';

// 单个字节对应的两位十六进制字符组合
type BytePair = `${HexChar}${HexChar}`;

// 递归定义:空字符串 或 一个BytePair拼接另一个ByteString,保证总长度为偶数
type ByteString = '' | `${BytePair}${ByteString}`;

验证示例

// 合法场景:长度偶数+全十六进制字符
let validStr: ByteString = "01afe3";
let emptyStr: ByteString = ""; // 空字符串默认合法(不需要可移除定义里的'')
let longValidStr: ByteString = "A1B2C3D4E5F610";

// 非法场景:类型会直接报错
let invalidLength: ByteString = "0a1"; // 错误:长度为奇数
let invalidChar: ByteString = "hello"; // 错误:包含非十六进制字符
let mixedInvalid: ByteString = "0g23"; // 错误:包含非法字符'g'

说明和调整

  1. 大小写支持:如果只需要小写或大写的十六进制字符,直接从HexChar中移除对应的字符组即可。
  2. 空字符串控制:如果不允许空字符串作为合法值,将ByteString的定义改为type ByteString = ${BytePair}${ByteString};即可。
  3. 递归深度限制:TypeScript对递归类型的深度有一定限制,极长的字符串(如数千字符)可能会绕过类型检查,但日常业务场景下完全够用。

内容的提问来源于stack exchange,提问作者qtom zheng

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 17:15:37