我正在尝试用TypeScript做一个codewar任务,但我遇到了标题中的错误。我假设问题是我需要定义传递给reduce函数的对象的类型,但我不知道签名应该是什么。
export function duplicateEncode(word: string): string{
const counts = word.split('').reduce((acc, val) => {
if (val in acc){
acc[val] += 1;
} else{
acc[val] = 1;
return acc;
}, {})
return word.split('').map(char => counts[char] == 1 ? '(' : ')').join('');
}
您可以通过定义变量来声明累加器的类型:
export function duplicateEncode(word: string): string {
const acc: { [key: string]: number } = {};
const counts = word.split('').reduce((acc, val) => {
if (val in acc) {
acc[val] += 1;
} else {
acc[val] = 1;
return acc;
}, acc);
return word.split('').map(char => counts[char] == 1 ? '(' : ')').join('');
}
类型
{ [key: string]: number }
是一个对象,其中键是字符串,值是数字。
您还可以内联断言该类型:
const counts = word.split('').reduce((acc, val) => {
return acc;
}, {} as { [key: string]: number });
您可以使用任何字符串(字符)作为键,因此
{ [key: string] : number }
应该可以做到这一点:
export function duplicateEncode(word: string): string{
const acc: { [key: string] : number } = {}
const counts = word.split('').reduce((acc, val) => {
if (val in acc){
acc[val] += 1;
} else{
acc[val] = 1;