![](/img/trans.png)
[英]error TS7053: Element implicitly has an 'any' type because expression of type '“data”' can't be used to index type '{}'
[英]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.