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

TypeScript中未知字符串枚举参数应使用什么类型定义?

类型定义修改方案

报错原因

TypeScript的函数参数符合逆变特性:你原代码中func的callback参数声明为接收string类型入参,此时传入的回调只能接收范围大于等于string的类型;而Category、OtherCategory这类字符串枚举的成员是比string更窄的字面量联合类型,就会出现类型不兼容的报错。

解决方案

使用泛型将枚举值的类型和回调入参的类型做绑定,修改后的func定义如下:

// 泛型 T 代表传入枚举的成员值类型
const func = <T extends string>(
  enumerator: Record<string | number, T>,
  callback: (value: T) => string,
) => Object.values(enumerator).map(callback);

修改后原有调用代码无需任何调整,TypeScript会自动根据你传入的枚举类型推导T的实际类型,既能通过类型校验,也能保留完整的类型提示能力。

如果后续需要兼容数字枚举,只需要把泛型约束修改为<T extends string | number>即可,其余逻辑保持不变。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 07:39:02