控制流分析为何会使已经收窄的类型重新变宽
简答题中等890 次浏览
参考答案与解析
# 核心结论
TypeScript 的类型收窄是控制流当前位置上的临时事实,不是给变量永久贴上的类型标签。编译器会根据检查条件、赋值历史、提前返回和可能的副作用计算某一位置上的可用类型。当变量被重新赋值、属性所在对象可能被修改、相关值失去关联,或代码进入稍后执行的闭包时,原有收窄可能被撤销或不再适用。工程上应缩短“检查到使用”的距离,并在需要跨越异步或回调边界时,把已经验证的值保存到局部常量。
# 底层机制
编译器为分支、循环、返回、抛错和赋值等节点建立控制流关系,并沿可达路径传播类型事实。例如:
function print(value: string | undefined) {
if (va
