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

TypeScript:具有可变结构的方法返回类型如何定义?

解决方案

你可以利用TypeScript的泛型、映射类型和模板字面量类型来精确定义myMethod的返回类型,让TypeScript能根据传入的属性数组自动推断出带Trigger后缀的键结构。

完整代码示例

// 先定义你的NotRelevantType
type NotRelevantType = { /* 这里写实际的类型定义 */ };

class T {
  propA: number;
  propB: string;
  method() {}
}

// 泛型版本的myMethod
function myMethod<T, K extends keyof T>(
  obj: T,
  properties: readonly K[]
): { [P in K as `${string & P}Trigger`]: NotRelevantType } {
  const result: Record<string, NotRelevantType> = {};
  // 实现逻辑:遍历属性数组生成对应Trigger键
  for (const prop of properties) {
    result[`${prop}Trigger`] = {} as NotRelevantType; // 替换为实际的Trigger创建逻辑
  }
  return result as { [P in K as `${string & P}Trigger`]: NotRelevantType };
}

const obj = new T();
const result = myMethod(obj, ['propA', 'propB']);
// result的类型会被推断为:{ propATrigger: NotRelevantType; propBTrigger: NotRelevantType }

关键细节说明

  1. 泛型约束:

    • 用T捕获传入对象的类型,K extends keyof T确保properties数组里的元素都是对象T的有效属性名,避免传入不存在的属性。
    • 把properties设为readonly K[],让TypeScript能精确推断出K的具体值(而不是宽泛的string)。
  2. 映射类型+模板字面量:

    • { [P in K as ${string & P}Trigger]: NotRelevantType }是核心:
      • P in K遍历所有传入的属性名;
      • as ${string & P}Trigger``用模板字面量给每个属性名添加Trigger后缀;
      • 每个键对应的类型都是NotRelevantType。

如果对象类型是any的兼容写法

如果不需要限制properties必须是对象的有效属性,可以简化为:

function myMethod<K extends string>(
  obj: any,
  properties: readonly K[]
): { [P in K as `${P}Trigger`]: NotRelevantType } {
  // 实现逻辑同上
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 21:45:33