如何在TypeScript中定义非空二进制字符串类型BinaryString?
解决TypeScript定义非空二进制字符串类型的循环引用问题
你当前的写法因类型别名直接循环引用自身导致报错,TypeScript不允许这种直接递归定义,以下是可行的解决方式:
方法:递归联合类型定义
通过将类型拆分为「单个二进制字符」和「二进制字符+二进制字符串」的联合类型,避免直接循环引用:
type BinChar = "0" | "1"; type BinString = BinChar | `${BinChar}${BinString}`; // 测试用例 const validBin: BinString = "01"; // 类型校验通过 const invalidStr: BinString = "ab"; // 类型校验报错(包含非二进制字符) const singleChar: BinString = "1"; // 类型校验通过(非空单个字符符合要求) const emptyStr: BinString = ""; // 类型校验报错(空字符串不符合非空要求)
原理说明
这种写法将BinString定义为两种情况的联合:
- 单个合法的二进制字符(满足非空的基础条件)
- 一个二进制字符后拼接任意合法的
BinString(递归扩展出任意长度的非空二进制字符串)
TypeScript支持这种在联合类型内的递归引用,不会触发循环报错,同时能准确校验字符串是否为非空二进制格式。
内容的提问来源于stack exchange,提问作者Jean-Philippe Pellet
相关产品推荐
相关产品推荐

