如何用可辨识联合避免不合理的状态组合?
把加载、成功、失败建模为互斥状态,并检查分支是否完整。
参考答案
多个独立布尔值容易组合出“正在加载但又成功又失败”的无效状态。可辨识联合用一个字面量字段区分分支,使每个分支只包含自身需要的数据。
TypeScript
type State<T> =
| { status: "loading" }
| { status: "success"; data: T }
| { status: "error"; error: Error };
function read(state: State<string>) {
if (state.status === "success") {
return state.data;
}
}
在 switch 中处理所有分支,并让默认分支的变量赋给 never,可在新增状态却漏写处理时得到类型错误。