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

如何向创建时无枚举访问权限的函数传入枚举,返回可赋值给该枚举类型的变量?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 13:40:27