TypeScript 类型收窄是编译器根据条件判断和控制流,把某个位置上可能的值类型缩小到更具体范围的过程。
判别联合与穷尽检查
判别联合用共同字段区分不同结构,控制流检查后即可安全访问相应属性:
type LoadState<T> =
| { status: "loading" }
| { status: "success"; data: T }
| { status: "error"; message: string };
function describe(state: LoadState<string>): string {
switch (state.status) {
case "loading": return "加载中";
case "success": return state.data;
case "error": return state.message;
default: {
const exhaustive: never = state;
return exhaustive;
}
}
}
启用严格检查,尤其是 strictNullChecks,有助于显式处理 null 与 undefined。不要靠非空断言掩盖尚未处理的加载状态。