javascript - 对于未知的字符串枚举参数,我应该使用什么类型?
问题描述
我正在尝试键入一个未知的字符串枚举参数,但没有成功,因为字符串枚举不能分配给字符串类型的参数。这是我的用例:
const func = (
enumerator: Record<number, string>,
callback: (value: string) => string,
) => Object.values(enumerator).map(callback);
enum Category {
HAZARDOUS = "HAZARDOUS",
REGULAR = "REGULAR",
}
enum OtherCategory {
DRY = "DRY",
REEFER = "REEFER",
}
func(Category, (value: Category) => t(value));
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
func(OtherCategory, (value: OtherCategory) => t(value));
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Argument of type '(value: Category) => string' is not assignable to parameter of type '(value: string) => string'.
Types of parameters 'value' and 'value' are incompatible.
Type 'string' is not assignable to type 'Category'.
我应该用什么来输入enumerator
和value
参数?
解决方案
enum 是 TypeScript 中一种特殊的数据结构,我个人不能说它完全匹配Record<string, string>
.
如果您需要Record<string, string>
,最好使用这样的不可变对象:
const Category = {
HAZARDOUS: "HAZARDOUS",
REGULAR: "REGULAR",
} as const
我会这样输入:
enum Category {
HAZARDOUS = "HAZARDOUS",
REGULAR = "REGULAR",
}
type Values<T> = T[keyof T]
const func = <Enumerator extends Record<string, string>>(
enumerator: Enumerator,
callback: (value: Values<Enumerator>) => string,
) => (Object.values(enumerator) as Array<Values<Enumerator>>).map((value) => callback(value));
func(Category, (value /** Values<typeof Category> */) => 'sdf');
我使用了类型断言,因为Object.values
返回any[]
推荐阅读
- python - 如何通过 python 将 json 文件/数据发布到 api url
- python - 如果行等于python中的值,则打印列名
- excel - 我们是否有“存在”功能来使用 VBA 搜索 excel 工作表
- ruby-on-rails - 如果更新时存在属性,Rails如何仅调用自定义验证方法
- python - 如何将下面提到的 R 代码转换为 python 代码?
- javascript - TypeError:无法读取未定义的属性“栏”
- c# - 调试时如何正确忽略异常?
- unity3d - SystemEvent Prefab 的游戏对象不起作用
- java - 具有多个登录 URL 的 SpringBoot OAuth 2
- php - Laravel 获取 Excel 的内容以插入数据库