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

为何函数返回的对象键无法推断值类型?TypeScript技术疑问

TypeScript计算属性键为函数调用时的类型推断问题

这确实是TypeScript的预期行为。

TypeScript在处理对象字面量的计算属性键时,对于直接嵌入的函数调用表达式(比如示例中的[getB()]),不会对函数返回值进行常量折叠以提取其字面量类型,而是将该键视为更宽泛的类型——哪怕函数明确返回的是字面量'b'。

对比三种写法的差异:

  • 用字符串字面量['b']作为键时,TypeScript直接识别出键的类型是'b',能精准匹配type A中对应的属性,因此可以自动推断出回调参数arg的类型为string。
  • 将函数返回值赋值给变量key后,TypeScript会对这个变量进行类型窄化,保留其字面量类型'b',后续用[key]作为属性键时,自然能关联到A中的b属性,完成类型推断。
  • 直接使用[getB()]作为计算键时,TypeScript在这个上下文里不会解析函数返回值的具体字面量类型,也就无法关联到A的对应属性,导致回调参数arg的类型隐式为any。

如果想在这种场景下实现类型推断,最直接的方式就是像示例中的c那样,先把函数返回值赋值给一个变量,再用变量作为计算属性键;或者也可以显式为计算键指定类型,比如:

const a = {
    [getB() as 'b']: (arg) => {
        console.log(arg);
    },
} as A;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 07:06:33