【问题标题】:hex-to-binary in typescript?打字稿中的十六进制到二进制?
【发布时间】:2021-03-20 09:38:48
【问题描述】:

这个函数是hex-to-binary 包使用的。因为它没有类型文件,甚至在 decs.t.ts 中声明也不起作用,所以我尝试在 typescript 中实现:

const lookup: Lookup = {
  "0": "0000",
  "1": "0001",
  "2": "0010",
  "3": "0011",
  "4": "0100",
  "5": "0101",
  "6": "0110",
  "7": "0111",
  "8": "1000",
  "9": "1001",
  a: "1010",
  b: "1011",
  c: "1100",
  d: "1101",
  e: "1110",
  f: "1111",
  A: "1010",
  B: "1011",
  C: "1100",
  D: "1101",
  E: "1110",
  F: "1111",
};

export function hexToBinary(s:string) {
  let ret = "";
  for (let i = 0, len = s.length; i < len; i++) {
    ret += lookup[s[i]];
  }
  return ret;
}

所以我们将一个字符串传递给 hexToBinary(s:string)。具体来说,这个字符串必须只有二进制字符,因为我不知道如何定义它,我通过 s:string 因为 s.length 将被定义。

lookup[s[i]] 给出此错误:“元素隐式具有 'any' 类型,因为 'string' 类型的表达式不能用于索引类型 '{ 0: string; 1: string; 2: string; 3 : 字符串;4:字符串;5:字符串;6:字符串;7:字符串;8:字符串;9:字符串;a:字符串;b:字符串;c:字符串;d:字符串;e:字符串;f:字符串; A:字符串;B:字符串;C:字符串;D:字符串;E:字符串;F:字符串;}'。 在类型 '{ 0: string; 上找不到具有类型参数的索引签名1:字符串; 2:字符串; 3:字符串; 4:字符串; 5:字符串; 6:字符串; 7:字符串; 8:字符串; 9:字符串;一:字符串; b:字符串; c:字符串; d:字符串; e:字符串; f:字符串; A:字符串; B:字符串; C:字符串; D:字符串; E:字符串; F:字符串; }'"

所以打字稿将“查找”识别为数组。它不明白它是一个计算属性。

我为查找对象定义了一个接口:

interface Lookup {
  "0"?: string;
  "1"?: string;
  "2"?: string;
  "3"?: string;
  "4"?: string;
  "5"?: string;
  "6"?: string;
  "7"?: string;
  "8"?: string;
  "9"?: string;
  a?: string;
  b?: string;
  c?: string;
  d?: string;
  e?: string;
  f?: string;
  A?: string;
  B?: string;
  C?: string;
  D?: string;
  E?: string;
  F?: string;
}

但这一次我得到了这个错误: 元素隐含地具有“任何”类型,因为“字符串”类型的表达式不能用于索引类型“查找”。 在“Lookup”类型上找不到带有“字符串”类型参数的索引签名。ts(7053)

【问题讨论】:

    标签: node.js typescript hex


    【解决方案1】:

    lookup 声明为Record&lt;string, string&gt;(对象将字符串映射到字符串)以避免关键错误:

    const lookup: Record<string, string> = {
        // lookup goes here
    };
    
    // rest of code
    

    Playground link

    【讨论】:

      【解决方案2】:

      在 typescript 操场上运行代码后,我看到的唯一错误是未定义 Lookup。考虑到您正在声明一个对象,如果您想为它分配一个接口(如Lookup),您将不得不提及接口中的每个属性。相信我,你不想这样做

      关于手头的问题,我无法理解您尝试采用的方法。结果可以使用更简单的方法来实现。

      const binary = parseInt("AB5",16).toString(2)
      console.log(binary)
      


      以下答案可供参考:

      【讨论】:

        猜你喜欢
        • 2014-10-30
        • 2012-12-12
        • 2013-02-21
        • 2011-12-09
        • 2018-01-09
        • 2014-07-15
        • 2012-11-20
        • 2015-05-26
        相关资源
        最近更新 更多