logoProsperBao

Binary to Decimal

2022-05-30 09

题目来源(type-challenges)

问题

把字符串二进制转换为数字

type case1 = BinaryToDecimal<'10'> // 2
type case2 = BinaryToDecimal<'0011'> // 3
type case3 = BinaryToDecimal<'00000000'> // 0
type case4 = BinaryToDecimal<'11111111'> // 255
type case5 = BinaryToDecimal<'10101010'> // 170

解答

type BinaryToDecimal<S extends string, R extends unknown[] = []> = S extends `${infer F}${infer L}`
  ? F extends '0'
    ? BinaryToDecimal<L, [...R, ...R]>
    : BinaryToDecimal<L, [...R, ...R, 1]>
  : R['length']

拆分

  • 从左往右左边的数字是右边的两倍如果余数是1则+1