首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >元素隐式具有“”any“”类型,因为类型“”{}“”没有索引签名

元素隐式具有“”any“”类型,因为类型“”{}“”没有索引签名
EN

Stack Overflow用户
提问于 2020-04-13 12:50:08
回答 2查看 46关注 0票数 0

我正在尝试用TypeScript做一个codewar任务,但我遇到了标题中的错误。我假设问题是我需要定义传递给reduce函数的对象的类型,但我不知道签名应该是什么。

代码语言:javascript
复制
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('');
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-13 13:24:26

您可以通过定义变量来声明累加器的类型:

代码语言:javascript
复制
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 }是一个对象,其中键是字符串,值是数字。

您还可以内联断言该类型:

代码语言:javascript
复制
const counts = word.split('').reduce((acc, val) => {
  ...
  return acc;
}, {} as { [key: string]: number });
票数 1
EN

Stack Overflow用户

发布于 2020-04-13 13:25:09

您可以使用任何字符串(字符)作为键,因此{ [key: string] : number }应该可以做到这一点:

代码语言:javascript
复制
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('');
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61181695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档