You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在TypeScript中为空对象指定类型?解决字符统计函数报错

解决TypeScript中字符统计对象的类型报错问题

你遇到的报错是因为TypeScript无法推断空对象{}的索引类型,需要显式指定其键值类型。以下是两种可行的解决方案:

方案一:使用索引签名

直接为strObj定义索引签名,明确键为字符串类型,值为数字类型:

function maxChar(str: string) {
  const strObj: { [key: string]: number } = {};
  let maxCount = 0;
  let maxChar = "";

  for (let char of str) {
    strObj[char] = strObj[char] + 1 || 1;
  }
  for (let key in strObj) {
    if (strObj[key] > maxCount) {
      maxCount = strObj[key];
      maxChar = key;
    }
  }
  return maxChar;
}

方案二:使用Record内置类型

TypeScript提供了Record<K, T>工具类型,用于定义键类型为K、值类型为T的对象,写法更简洁:

function maxChar(str: string) {
  const strObj: Record<string, number> = {};
  let maxCount = 0;
  let maxChar = "";

  for (let char of str) {
    // 更严谨的写法:避免初始值判断的潜在问题
    strObj[char] = (strObj[char] || 0) + 1;
  }
  for (let key in strObj) {
    if (strObj[key] > maxCount) {
      maxCount = strObj[key];
      maxChar = key;
    }
  }
  return maxChar;
}

补充说明

  • 两种方案本质等价,Record<string, number>是{ [key: string]: number }的语法糖。
  • 优化后的计数逻辑(strObj[char] || 0) + 1比原代码更严谨,避免极端场景下的逻辑问题(虽然原代码在当前场景下也能正常工作)。

内容的提问来源于stack exchange,提问作者Zixxy7

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 07:45:37