isRef用于判断值是否为ref实例并返回布尔值,它通过检查对象的__v_isRef属性来识别ref、shallowRef、computed等响应式对象,不改变数据,常作类型守卫以安全访问.value。

isRef 是 Vue 3 提供的轻量工具函数,专用于判断一个值是否为 ref 实例(包括 ref()、shallowRef()、computed() 等返回的对象),它不改变数据,只返回 true 或 false。
isRef 的判断依据很明确
它内部检查对象是否具备 __v_isRef: true 这个标识——这是 Vue 响应式系统给所有 ref 类型实例打上的“身份证”。所以:
-
isRef(ref(42))→true -
isRef(computed(() => count.value * 2))→true -
isRef(42)、isRef({})、isRef(reactive({}))→ 全部是false
在 TypeScript 中用作类型守卫最实用
搭配泛型使用时,isRef 能帮 TypeScript 缩小类型范围,让后续访问 .value 安全无报错:
使用 `@ainative/vue-sdk` 为 Vue 3 应用添加 AI 聊天功能。适用于以下场景:(1) 安装 `@ainative/vue-sdk`,(2) 在 Vue 组件中使用 `useChat` 组合式函数,(3) 提供……
- 没加泛型:
if (isRef(source)) { source.value.toUpperCase() }会报错,因为 TS 推导出source是Ref<unknown> - 加泛型:
if (isRef<string>(source)) { source.value.toUpperCase() }就能通过,TS 明确知道source是Ref<string>
常见使用场景
多数出现在需要兼容 ref 和普通值的函数或逻辑中:
立即学习“前端免费学习笔记(深入)”;
- 组合式函数接收参数不确定是
ref还是原始值时,先判断再取值 - 从
defineProps解构后,不确定某 prop 是响应式还是静态传入,用isRef保护.value访问 - 模板中不能自动解包的场合(比如
v-model绑定 computed ref),需在 script 里手动判断是否要读.value
注意别和 unref 混用错时机
isRef 只负责“问是不是”,不取值;unref 才是“是就取 .value,不是就直接用”。两者常配合,但职责分明:
- 需要分支逻辑(比如 ref 走 A 路,普通值走 B 路)→ 用
isRef - 只想统一拿到最终值,不管来源 → 直接用
unref - 既要判断类型,又要安全取值 → 先
isRef再.value,或直接unref

















