为泛型关联的OrderByType设置默认值报错,求解决方案
问题分析
你定义的OrderByType<T>要求对象必须包含Entity的所有属性,每个属性的值都得是'asc'或'desc'。但你给的默认值{ createdAt: 'asc' }只包含了createdAt这一个属性,当Entity存在其他属性时,这个默认值就不满足OrderByType<Entity>的类型要求,因此TypeScript抛出错误。
解决方案
方案一:调整类型定义(推荐)
修改OrderByType的定义,将其改为可选属性的集合,这样只需要包含部分属性(甚至空对象)都符合类型要求,完全匹配你“设置默认排序、其余规则可选添加”的需求:
// 用Partial包裹,让所有属性变为可选 type OrderByType<T> = Partial<{ [key in keyof T]: 'asc' | 'desc' }>; export class OrderByArgs<Entity extends { createdAt: Date }> { orderBy: OrderByType<Entity> = { createdAt: 'asc' }; }
方案二:类型断言(不推荐,仅临时绕过)
如果不想修改OrderByType的定义,可以用类型断言强制让TypeScript接受默认值,但这种方式不够严谨,仅适合确定场景下使用:
type OrderByType<T> = { [key in keyof Partial<T>]: 'asc' | 'desc'; }; export class OrderByArgs<Entity extends { createdAt: Date }> { orderBy: OrderByType<Entity> = { createdAt: 'asc' } as OrderByType<Entity>; }
内容的提问来源于stack exchange,提问作者Carlo Schneider
相关产品推荐
相关产品推荐

