后端API排序函数的TypeScript类型约束问题求助
后端API排序函数的TypeScript类型约束问题求助
大家好,我正在给后端API写一个挺简单的排序函数,需求逻辑如下:
- 如果没有排序需求,函数返回空字符串
- 如果有排序需求,就根据指定列从枚举里取值,再做一点小修改后返回结果
不过我现在卡在类型约束的问题上了:
当sort不为null时,它的sortBy是传入函数的泛型T(字符串联合类型),这部分目前是正常工作的,但我不知道怎么正确给函数传入枚举,让sort.sortBy刚好是这个枚举的有效键。
下面是我目前的代码:
type SortState = null | {sortBy: string; sortAsc: boolean; } const handleSort = <T, K extends T>(sort: SortState, sortEnum: K) => { if (!sort) { return ''; } const name = sort.sortBy as T; const order = sort.sortAsc; const newQuery = `${order ? '-' : ''}${order ? sortEnum[name].replaceAll(',', ',-') : sortEnum[name]}`; return newQuery; }; enum SortEnum { bar = 'bar', foo = 'foo' } type TableHeaders = 'foo' | 'bar' const sortQuery = handleSort<TableHeaders>({sortBy: 'bar', sortAsc: false}, SortEnum)
我现在的泛型定义<T, K extends T>明显有问题,没法把sortBy和枚举的键关联起来,想请教各位大佬,怎么调整类型定义,才能让sort.sortBy必须是传入的sortEnum的有效键,同时保证整个函数的类型安全呢?
备注:内容来源于stack exchange,提问作者adammo
相关产品推荐
相关产品推荐

