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

TypeScript 如何定义返回与入参属性同名方法对象的函数返回类型

解决方案

你自定义的映射类型逻辑是正确的,问题出在两个地方:一是没有给someGenerator函数显式标注返回类型,二是TS无法自动推断reduce操作的最终返回结构,需要手动补充类型断言。另外建议不要用和TS内置工具类型重名的ReturnType作为自定义类型名,避免冲突。

步骤1:定义映射类型

// 避免和TS内置ReturnType重名,改名GeneratorResult
type GeneratorResult<P> = {
  [K in keyof P]: () => void;
};

步骤2:修改函数的类型标注

function someGenerator<P extends object>(params: P): GeneratorResult<P> {
  return Object.keys(params).reduce((acc, key) => ({
    ...acc,
    [key]: () => {
      // 补充key的类型断言,解决Object.keys返回string无法索引泛型对象的问题
      console.log(params[key as keyof P]);
    },
  }), {} as GeneratorResult<P>); // 给初始值加类型断言,明确reduce的返回类型
}

效果验证

你原本的测试代码可以正常获得类型提示:

type Params = {
  str: string;
}

const params = {
  str: 'some text',
}

const someInstance = someGenerator<Params>(params);
// TS会正确识别someInstance上存在str方法,调用无报错
someInstance.str();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 23:06:02