Skip to content

Latest commit

 

History

History
36 lines (27 loc) · 1.52 KB

BinaryToDecimal.md

File metadata and controls

36 lines (27 loc) · 1.52 KB
标题 标签
BinaryToDecimal(二进制数值字符串转十进制数字) extends,infer(继承,推断)

二进制数值字符串转十进制数字。

  • 二进制转换为十进制是将每一位数与 2 的幂相乘然后相加,因此我们传入第二个参数一个数组参数,每次移动一位就需要添加 2 个数字存到数组中,最后返回数组长度即可。当所有字符为 0 的时候,则只需要添加原数组展开的 2 位即可,否则就需要添加原数组的 2 位展开并添加一个随意数字,使用 infer 关键字推断每一个第一个字符串参数的每一个字符。

代码如下:

type BinaryToDecimal<
  T extends string,
  U extends number[] = []
> = T extends `${infer F}${infer R}`
  ? F extends '0'
    ? BinaryToDecimal<R, [...U, ...U]>
    : BinaryToDecimal<R, [...U, ...U, 0]>
  : U['length'];

使用方式:

type BinaryToDecimalRes1 = BinaryToDecimal<'10'>; //  2
type BinaryToDecimalRes2 = BinaryToDecimal<'0011'>; // 3
type BinaryToDecimalRes3 = BinaryToDecimal<'00000000'>; //  0
type BinaryToDecimalRes4 = BinaryToDecimal<'11111111'>; //  255
type BinaryToDecimalRes5 = BinaryToDecimal<'10101010'>; //  170

应用场景

如下所示,鼠标悬浮到对应的类型变量可以查看类型。