vue3源码ref TS阅读

vue3 ref源码

这里的ref函数返回的[T] extends [Ref] ? T : xxx

我特意查了一下TS官网

这里是为了防止传联合类型才做了一层保护。

但是我觉得放在VUE 这里 语境好像不对,有大神解释一下吗?

阅读 2k
1 个回答

我觉得语境没啥问题吧,就是为了约束联合类型分配。

如果有一个类型如下:

interface A {
  a: number
}

type Test = A | Ref

如果不约束类型分配,在进行 extends 运算时:

// Test 代入 T extends Ref ? T : Ref<UnwrapRef<T>> 运算
Test extends Ref
  => (A extends Ref ? T : Ref<UnwrapRef<T>>) | (Ref extends Ref ? T : Ref<UnwrapRef<T>>)
  => Ref<UnwrapRef<T>> | T

这是不符合预期的,预期想要得到的结果应该是 Ref<UnwrapRef<Test>>,所以要约束类型分配。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题