如何在TypeScript中约束函数返回与入参同结构的对象?
可行,用泛型即可实现需求
你需要的功能完全可以通过TypeScript的泛型实现,核心思路是用泛型参数捕获传入对象的具体键结构,而不是用丢失具体键信息的索引签名接口。
具体实现代码
// 泛型函数,T约束为键是字符串、值是string[]的对象 function transformer<T extends Record<string, string[]>>(argument: T): T { // 这里写你的转换逻辑,示例为浅拷贝每个数组 const transformed = {} as T; for (const key in argument) { if (Object.prototype.hasOwnProperty.call(argument, key)) { transformed[key] = argument[key].map(item => item); // 示例转换操作 } } return transformed; }
效果验证
调用这个函数时,TypeScript会自动推导出入参的具体键集合,返回值的类型和入参完全一致:
const result = transformer({ linda: ['1', '2', '3'], jacob: ['4', '5', '6'] }) result.linda; // ✅ 正常访问,编辑器会提供智能提示 result.jeremy; // ❌ TypeScript会报错:类型上不存在属性"jeremy"
原理说明
- 泛型参数
T会精确捕获传入对象的结构,包括所有具体的键和对应值的类型。 T extends Record<string, string[]>确保传入的对象只能有字符串键,且每个键对应的值都是string[]类型,符合你对值类型的约束。- 返回类型指定为
T,强制返回值的结构和入参完全一致,从而实现智能提示和不存在键的错误检查。
内容的提问来源于stack exchange,提问作者Seth Lutske
相关产品推荐
相关产品推荐

