我一直在尝试扩展我的React功能,因此尝试将项目从Javascript移到Typescript,但是我遇到了一些似乎无法修复的错误。
我已经做了大量的阅读和搜索,但是似乎无法弄清楚我在做什么错。
其他组件以及主应用程序均可正常工作。就是这个组件。
// Imports
interface Props { }
interface State { }
class Anagram extends Component<Props, State> {
constructor(props: Props) {
super(props);
}
alphabetize(word: any) {
if (word) {
word = word.split('');
word = word.sort();
word = word.join('');
return word;
}
return;
}
getGroupedAnagrams(words: string[]) {
const anagrams = {};
words.forEach((word) => {
const sortedWord = this.alphabetize(word);
if (anagrams[sortedWord]) {
return anagrams[sortedWord].push(word);
}
anagrams[sortedWord] = [word];
});
return anagrams;
}
render() {
const words = ['map', 'art', 'how', 'rat', 'tar', 'who', 'pam', 'shoop'];
const groupedAnagrams = this.getGroupedAnagrams(words);
for (const sortedWord in groupedAnagrams) {
console.log(groupedAnagrams[sortedWord].toString());
}
return (
// Body elements
);
}
}
export default Anagram;
因此,第一个函数接收一个字符串并将其拆分并创建一个字母顺序化的字符串。然后,下一个函数接收一个字符串数组,然后对数组中的每个单词通过第一个函数运行该单词,然后检查anagrams对象是否已包含该“键”。如果确实如此,则它将原始单词推入该按字母顺序排列的单词的数组。如果不包含该单词,则添加该“键”。
我的问题是所有具有[sortedWord]的区域都返回错误:
Element implicitly has an 'any' type because expression of type 'any' can't be used to index type '{}'.
我做错了什么?在修复此错误之前,项目将无法正确编译。
答案 0 :(得分:1)
“单词”的类型为“任意”。当您使用Alphabetize()的返回值并将其设置为遍历字谜的索引时。
anagrams[sortedWord]
将代码更改为此,它将起作用:
alphabetize(word: string) {
if (word) {
let words = word.split('');
words = words.sort();
word = words.join('');
return word;
}
return;
}
getGroupedAnagrams(words: string[]) {
const anagrams = {} as any;
words.forEach((word) => {
const sortedWord = this.alphabetize(word);
if (sortedWord) {
if( anagrams[sortedWord]){
return anagrams[sortedWord].push(word);
}
anagrams[sortedWord] = [word];
}
});
return anagrams;
}