变量有可能充当类型保护吗?

type Union = string | {prop: string};

function test(u: Union) {
  if (typeof u === "string") {
    u;
    //  ^? (parameter) u: string
  }

  if (typeof u === "object") {
    u;
    //  ^?(parameter) u: { prop: string }
  }

  let check = typeof u === "object";
  //  ^?let check: boolean

  if (check) {
    u.prop;
    //  ^?(parameter) u: Union
  }
}

TS Play Link

推荐答案

变量没有缩小的能力,但常量有缩小的能力!

const check = typeof u === "object";

if(check){
    u.prop // { prop: string }
}

Playground

Typescript相关问答推荐

如何用不同的键值初始化角react 形式

在泛型类型中对子代执行递归时出错

使用`renderToPipeableStream`时如何正确恢复服务器端Apollo缓存?

Typescript泛型类型:按其嵌套属性映射记录列表

Vue SFC中的多个脚本块共享导入的符号

如何判断对象是否有重叠的叶子并产生有用的错误消息

如何使我的函数专门针对联合标记?

如何将定义模型(在Vue 3.4中)用于输入以外的其他用途

在列表的指令中使用intersectionObservable隐藏按钮

使用TypeScrip的类型继承

基元类型按引用传递的解决方法

跟踪深度路径时按条件提取嵌套类型

缩小对象具有某一类型的任意字段的范围

Angular 16将独立组件作为对话框加载,而不进行布线或预加载

如何将通用接口的键正确设置为接口的键

当传递带有或不带有参数的函数作为组件props 时,我应该如何指定类型?

从泛型对象数组构造映射类型

TypeScript是否不知道其他函数内部的类型判断?

Angular另一个组件的nativeelement未定义

在Typescript 无法正常工作的 Three.js 中更新动画中的 GLSL 统一变量