比如说:
let str: ByteString = "01afe3"; // valid
let str1: ByteString = "0a1" // invalid, hex string length should be even
let str2: ByteString = "hello" //invalid, only hex allow
该值可以是有效十六进制的任何字符串。
我已经尝试了下面的代码:
type HexChar = '0' | '1' | '2' | '3' | '4' | '5' | '6'| '7' | '8' | '9' | 'A' | 'B' | 'C' | 'D' | 'E' | 'F';
type HexColor = `#${HexChar}${HexChar}${HexChar}${HexChar}${HexChar}${HexChar}`;
let color: HexColor = '#123456';
但这仅在值为固定长度时有效。
如果字符串值有效,我们需要一个可以处理任何长度的类型。
2条答案
按热度按时间xurqigkl1#
首先,您需要定义一个泛型
HexType
,它是一个条件类型并使用递归逻辑:然后创建一个helper函数,该函数可以获取任何值,但如果值类型不是
HexType
,则参数类型将是never
,因此该函数会给您一个错误。例如:
如果您希望十六进制字符串的长度为偶数,则可以使用另一个泛型类型和helper函数,如下所示:
例如:
您可以阅读更多关于条件类型here的信息。
a64a0gku2#
我找到的所有解决方案如下:
但这需要一个辅助函数
hexToString
。我不需要辅助函数,我只需要一个类型。