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

TypeScript为何推断动态键为返回对象的函数?

问题分析与解决方案

错误根源

你这里的核心问题是类型断言用错了:

  • keyof boolean取的是布尔值类型的内置属性(比如toString、valueOf这些函数),而非你定义的对象a的键类型
  • 断言后类型匹配错误,取到的值是函数类型,和checked需要的boolean | undefined类型不兼容,因此触发报错

修复方案

方案1:修正类型断言

直接把断言目标改成keyof typeof a,typeof a对应你定义的对象类型,keyof typeof a就是它的合法键类型(即"something"):

const a = { something: true };

// 修正后的代码
<Checkbox checked={a["Some Thing".toLowerCase().replace(/\s+/g, "") as keyof typeof a]} />

方案2:添加类型守卫(更安全)

如果担心字符串转换后可能不属于对象的键,可以加类型守卫做安全校验:

const a = { something: true };
const key = "Some Thing".toLowerCase().replace(/\s+/g, "");

// 类型守卫:验证key是否为a的合法键
function isKeyOfA(k: string): k is keyof typeof a {
  return k in a;
}

// 使用时判断取值
<Checkbox checked={isKeyOfA(key) ? a[key] : undefined} />

方案3:定义明确的键类型(适合复杂场景)

如果这类键转换是高频逻辑,可以先定义对象的键类型,再复用:

type AKey = "something";
const a: Record<AKey, boolean> = { something: true };

const key = "Some Thing".toLowerCase().replace(/\s+/g, "") as AKey;
<Checkbox checked={a[key]} />

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 19:07:07