繁体   English   中英

TS7053:元素隐式具有“任何”类型,因为“字符串”类型的表达式不能用于索引类型“{ A:数字; B:数字

[英]TS7053: Element implicitly has an 'any' type because expression of type 'string' can't be used to index type '{ A: number; B: number

所以我有一个 function,它将采用大写字母字符串,每个字母的值如字母表 object 中所述。但我在 typescript 中编写它时遇到了麻烦。这是在 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 = ["A", "A"]

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

  console.log(startColumn);
};

adressDecoder()

这是错误: 在此处输入图像描述

在此处输入图像描述

所以我尝试将类型转换为字母表 object,但我做错了,现在 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 = ["A", "A"]

  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);// should be 27
};

adressDecoder()

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

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

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

alphabet object中没有等于AA的键

要正确定义 alpabet object 的类型,请使用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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM