如何为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
相关产品推荐
相关产品推荐

