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

TypeScript中计算属性不存在时如何使用默认值?

TS7053报错原因

当你使用字面量定义def_val对象时,TypeScript会自动将其类型推导为仅包含a、b、c三个固定键的对象,不允许未做约束的string类型变量直接作为索引取值,因此抛出该错误。

可行实现方案

以下两种方案都可以实现和原生JS一致的逻辑,同时符合TS类型规范:

  1. 为对象添加字符串索引签名
    通过Record<string, string>类型标注,声明该对象支持任意字符串作为索引,不需要修改原有逻辑:
const def_val: Record<string, string> = {a:"debug",b:"info",c:"warning"};

function work(y: string) {
    let x = def_val[y] || def_val.a;
}
  1. 约束入参为对象的合法键类型
    使用keyof typeof语法将参数y的类型限定为def_val的键的联合类型,从入参层面保证类型安全,适合仅允许传入合法键值的场景:
const def_val = {a:"debug",b:"info",c:"warning"};

function work(y: keyof typeof def_val) {
    let x = def_val[y] || def_val.a;
}

如果需要同时支持传入任意字符串,又不想额外声明索引签名,也可以通过类型断言简化写法:

const def_val = {a:"debug",b:"info",c:"warning"};

function work(y: string) {
    let x = def_val[y as keyof typeof def_val] || def_val.a;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 00:27:03