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

如何为TypeScript的createMapping函数创建以MyInterface值为键的返回值接口?

解决方法:用TypeScript映射类型定义返回值接口

首先得明确一点:你说的“键为MyInterface的值”,从示例{val1: true}来看,应该是指返回对象的键要么是MyInterface的属性名,要么是MyInterface属性的固定取值。下面分两种情况给你落地的解决方案:

情况1:键是MyInterface的属性名

假设你的MyInterface是这样的(属性名是val1、val2这类):

interface MyInterface {
  val1: any; // 属性类型不影响键的定义,这里随便写个占位类型
  val2: any;
}

我们可以用映射类型直接生成符合要求的返回值类型,不用手动逐个写键:

// 定义返回值类型:键是MyInterface的所有属性名,值为boolean,支持只包含部分键
type MyMapping = Partial<Record<keyof MyInterface, boolean>>;

如果需要强制返回值包含所有键(你的示例里有部分键的情况,所以更推荐上面的Partial版本),可以用这个:

type MyFullMapping = Record<keyof MyInterface, boolean>;

接着把createMapping的返回值指定为这个类型:

function createMapping(apiResponse: unknown): MyMapping {
  const result: MyMapping = {};
  // 这里写你的API响应解析逻辑,举个简单例子:
  if (apiResponse && typeof apiResponse === 'object' && 'val1' in apiResponse) {
    result.val1 = true;
  }
  if (apiResponse && typeof apiResponse === 'object' && 'val2' in apiResponse) {
    result.val2 = true;
  }
  return result;
}

情况2:键是MyInterface的属性值

如果你的MyInterface是包含固定值的接口,比如:

interface MyInterface {
  option1: 'val1';
  option2: 'val2';
}

你想要返回值的键是val1、val2这些属性值,那先提取这些值的联合类型,再生成映射:

// 提取MyInterface所有属性值的联合类型
type MyInterfaceValueKeys = MyInterface[keyof MyInterface];

// 定义返回值类型,支持只包含部分键
type MyValueMapping = Partial<Record<MyInterfaceValueKeys, boolean>>;

同样把函数返回值设为这个类型,TypeScript会自动校验返回对象的键只能是val1或val2,值必须是boolean,完全匹配你的示例需求。

为什么用映射类型?

这种方式的最大好处是:如果以后MyInterface新增了属性,你的返回值类型会自动同步更新,不用手动修改接口定义,能减少不少维护成本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:22:44