【问题标题】:TS7053: Element implicitly has an 'any' type because expression of type 'string' can't be used to index type '{ A: number; B: numberTS7053:元素隐式具有 \'any\' 类型,因为类型 \'string\' 的表达式不能用于索引类型 \'{ A: number; B:数字
【发布时间】:2023-01-09 20:08:56
【问题描述】:

所以我有一个函数,它将接受大写字母的字符串,并且每个单独的字母都具有字母表对象中所述的值。但是我在用打字稿写它时遇到了麻烦。这是在 javascript 中运行的代码:

export const alphabet = {
  A: 1,
  B: 2,
  C: 3,
  D: 4,
  E: 5,
  F: 6,
  G: 7,
  H: 8,
  I: 9,
  J: 10,
  K: 11,
  L: 12,
  M: 13,
  N: 14,
  O: 15,
  P: 16,
  Q: 17,
  R: 18,
  S: 19,
  T: 20,
  U: 21,
  V: 22,
  W: 23,
  X: 24,
  Y: 25,
  Z: 26,
};

const adressDecoder = () => {
  let startColumnString = ["AA"];

  let startColumn = startColumnString.reduce((prev, curr) => {
    if (prev === 0) return alphabet[curr];
    return prev * 26 + alphabet[curr];
  }, 0);

  console.log(startColumn);
};

adressDecoder()

这是错误:

所以我尝试将类型转换为字母表对象,但我做错了,现在 console.log() 返回 undefined

interface Alphabet {
  [key: string]: number;
}

export const alphabet: Alphabet = {
  A: 1,
  B: 2,
  C: 3,
  D: 4,
  E: 5,
  F: 6,
  G: 7,
  H: 8,
  I: 9,
  J: 10,
  K: 11,
  L: 12,
  M: 13,
  N: 14,
  O: 15,
  P: 16,
  Q: 17,
  R: 18,
  S: 19,
  T: 20,
  U: 21,
  V: 22,
  W: 23,
  X: 24,
  Y: 25,
  Z: 26,
};

const adressDecoder = () => {
  let startColumnString = ["AA"];

  let startColumn = startColumnString.reduce((prev: number, curr: string) => {
    if (prev === 0) {
      let result: number = alphabet[curr];
      return result;
    }
    let result: number = prev * 26 + alphabet[curr];
    return result;
  }, 0);

  console.log(startColumn);
};

adressDecoder()

如何正确定义 alpabet 对象的接口/类型?

【问题讨论】:

    标签: javascript typescript


    【解决方案1】:

    它将返回undefined,因为第一个reduce迭代,prev变量将等于零,并且具有if条件

    if (prev === 0) return alphabet[curr];
    

    alphabet对象中没有等于AA的键

    【讨论】:

      【解决方案2】:

      要正确定义 alpabet 对象的类型,请像这样使用 type AlphabetType = keyof typeof alphabet;

      export const alphabet = {
        A: 1,
        B: 2,
        C: 3,
        D: 4,
        E: 5,
        F: 6,
        G: 7,
        H: 8,
        I: 9,
        J: 10,
        K: 11,
        L: 12,
        M: 13,
        N: 14,
        O: 15,
        P: 16,
        Q: 17,
        R: 18,
        S: 19,
        T: 20,
        U: 21,
        V: 22,
        W: 23,
        X: 24,
        Y: 25,
        Z: 26
      } as const;
      type AlphabetType = keyof typeof alphabet;
      

      【讨论】:

        猜你喜欢
        • 2020-11-14
        • 2022-11-10
        • 2022-01-17
        • 2021-12-24
        • 2022-10-08
        • 2019-11-24
        • 2023-01-09
        • 2021-10-24
        • 1970-01-01
        相关资源
        最近更新 更多