组件属性中的互斥状态如何建模才能避免非法组合进入渲染逻辑
简答题中等367 次浏览
参考答案与解析
# 核心结论
组件属性应直接表示所有合法状态,而不是把存在关联的字段分别声明为可选。互斥、依赖以及“状态决定载荷”的属性,优先建模为带公共判别字段的联合类型;真正对所有变体都成立的公共属性,再通过交叉类型组合。这样调用方无法构造非法组合,渲染逻辑也能依据判别字段完成控制流缩小,减少非空断言和防御性分支。若只有两个简单互斥属性,也可在禁止的一侧使用可选的 never,但复杂状态仍以可辨识联合最清晰。
# 底层机制
假设数据组件存在空闲、加载、成功和失败状态,可以让每个联合成员都具有 status,其值分别为不同字面量。成功成员必须携带 data,失败成员必须携带 error,其他成员则不暴露这些载荷。渲染
