如何向创建时无枚举访问权限的函数传入枚举,返回可赋值给该枚举类型的变量?
TypeScript中传递枚举参数并保留返回值类型的解决方案
你的核心问题是未通过泛型保留枚举的类型信息,导致函数返回值被TypeScript降级为基础类型(string/number),无法直接赋值给枚举类型变量。同时原函数的参数类型定义存在语法错误,以下是修正后的实现:
基础实现:返回整个枚举对象
enum TestEnum { VALUE = "value", } // 泛型函数,T捕获传入的枚举类型,约束为键值对结构(覆盖字符串/数字枚举) const takeAndReturnEnumsValueAsEnum = <T extends Record<string, string | number>>(e: T) => { return e; } let testVariable: TestEnum; // 此时类型完全匹配,无报错 testVariable = takeAndReturnEnumsValueAsEnum(TestEnum).VALUE;
进阶实现:直接返回指定枚举成员
如果需要更精准地返回某个枚举成员,可以扩展泛型,指定成员名称:
const getEnumValue = <T extends Record<string, string | number>, K extends keyof T>( enumObj: T, memberKey: K ): T[K] => { return enumObj[memberKey]; } // 使用示例 testVariable = getEnumValue(TestEnum, 'VALUE');
原理说明
- 泛型
T会自动推断传入的枚举类型,让TypeScript记住这个具体的枚举结构,而非将其视为普通的字符串/数字对象。 Record<string, string | number>作为约束,确保传入的参数符合枚举的基本结构(键为字符串,值为字符串或数字)。
内容的提问来源于stack exchange,提问作者Immanuel
相关产品推荐
相关产品推荐

