TypeScript函数返回可变Omit类型返回值的最佳实践是什么?
问题结论
你给出的写法是可以正常生效的,但存在冗余问题,不是最优实践。
原有写法的问题
你现在的写法将Record结构重复定义了两次,如果后续ReturnType或者SomeInterface的定义发生调整,你需要同步修改两处类型声明,维护成本更高,也容易出现不一致的疏漏。
最佳实践方案
根据你的实际场景可以选择两种更简洁的写法:
- 通用场景(key2可选,不同返回条目可独立控制是否存在key2)
直接通过类型交叉把key2声明为可选属性,语义更清晰,也没有冗余:
Promise<Record< ReturnType, Omit<SomeInterface, 'key1'> & Partial<Pick<SomeInterface, 'key2'>> >>
这个写法等价于「去掉key1属性,保留其他所有属性,其中key2是可选的」,完全匹配你需求调整后的定义。
- 严格区分全量返回场景(所有返回条目要么都有key2,要么都没有key2)
如果你的函数返回是两种明确的整体状态,不需要单条条目独立控制key2的存在性,可以把联合类型收敛到Record的泛型参数中,减少重复代码:
Promise<Record< ReturnType, Omit<SomeInterface, 'key1'> | Omit<SomeInterface, 'key1' | 'key2'> >>
如果你需要对返回整体状态做更严格的校验,也可以保留你原来的写法,把联合放在Record外层即可。
内容的提问来源于stack exchange,提问作者Ben Wu
相关产品推荐
相关产品推荐

