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

TypeScript如何定义限定字符为0/1、可指定长度的二进制字符串类型

实现方案

任意长度二进制字符串类型

基于TypeScript递归模板字面量实现,支持0到TS递归深度上限长度的二进制字符串约束:

type Binary = '0' | '1';
type BinaryStr = '' | Binary | `${Binary}${BinaryStr}`;

校验规则说明

  • 支持空字符串、单字符、任意组合的0/1字符串
  • 包含非0/1字符的字符串会触发类型报错
  • 受TS类型递归深度限制,默认支持最大长度约为20位,超过此长度的超长字符串可能会触发类型递归深度警告

可指定长度的二进制字符串类型

通过元组长度计数实现灵活的长度指定,无需手动拼接模板字面量:

type Binary = '0' | '1';

// 工具类型:泛型参数Len为要指定的二进制字符串长度
type FixedBinary<Len extends number, _acc extends Binary[] = []> = 
  _acc['length'] extends Len 
    ? `${_acc[number]}`
    : FixedBinary<Len, [..._acc, Binary]>;

使用示例

// 定义5位长度的二进制字符串类型,等价于你手动拼接的BinaryInput
type FiveBitBinary = FixedBinary<5>;

// 合法用例
const demo1: FiveBitBinary = '10101';
// 非法用例:长度不匹配
const demo2: FiveBitBinary = '1010';
// 非法用例:包含非0/1字符
const demo3: FiveBitBinary = '10201';

注意事项

  • 长度参数建议控制在20以内,过长的长度会导致类型计算变慢,甚至触发TS类型实例化过深的报错
  • 如果需要支持超长二进制串,建议搭配运行时正则校验/^[01]*$/配合类型断言使用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 12:54:05