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

TypeScript:如何为对象键值对分配正确的返回值类型?

TypeScript:将函数对象转换为返回值类型对象

问题说明

现有如下定义的对象:

export const typedGetters = {
  [GettersE.login]: (state: RootState) => state.loggedIn,
};

需要创建一个键名与原对象完全一致,但值类型为对应函数返回值类型的对象。举个直观例子:
原对象类型:

{
  test: () => "test";
  foo: () => DataType as DataT;
}

期望得到的目标类型:

{
  test: string;
  foo: DataT;
}

尝试了以下写法,但每个键的类型变成了所有返回值的联合类型(比如示例中login本应是boolean,却变成了联合类型):

let getters = store.getters as {
  [key in keyof typeof typedGetters]: ReturnType<
    (typeof typedGetters)[keyof typeof typedGetters]
  >;
};

修正方案

将类型定义中的函数类型定位改为针对当前key的具体函数,而不是所有函数的联合类型:

let getters = store.getters as {
  [key in keyof typeof typedGetters]: ReturnType<(typeof typedGetters)[key]>;
};

原理说明

原来的写法中,(typeof typedGetters)[keyof typeof typedGetters]会取到typedGetters中所有函数类型的联合,ReturnType作用于这个联合类型时,得到的就是所有返回值类型的联合。

而修正后的写法,对每个遍历到的key,单独取该key对应的函数类型(typeof typedGetters)[key],再通过ReturnType获取这个具体函数的返回值类型,这样每个键就能得到对应的精准类型。

以你的typedGetters为例,getters[GettersE.login]的类型会正确推导为boolean,符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 05:02:39