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

TypeScript:使用指定键创建对象时类型推导为any的问题

解决TypeScript中Object.fromEntries的类型推导问题

修正后的代码

const createObj = <T extends string>(keys: readonly T[]): Record<T, 0> => {
  return Object.fromEntries(
    keys.map((key) => [key, 0] as const)
  ) as Record<T, 0>;
};

const result = createObj(["hi","hello","gg"] as const);
// result类型为 { hi: 0; hello: 0; gg: 0; }

关键调整说明

  1. 适配只读字面量数组:把参数类型从T[]改为readonly T[],这样能兼容as const生成的只读字符串字面量数组,让TypeScript正确推导T为"hi" | "hello" | "gg"这个具体的联合类型。
  2. 明确返回类型:用Record<T, 0>指定函数返回类型,直接声明返回对象的键是T类型、值是字面量0类型,替代默认的any。
  3. 细化数组项类型:给[key, 0]加上as const,确保数组值的类型被推导为字面量0而非宽泛的number,最终让返回值的类型完全符合预期。

如果不需要值严格为0,只要求是number类型,可以把返回类型改成Record<T, number>,同时去掉[key, 0]后的as const。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 00:50:37