老师非常不好意思,又来麻烦你了
我最近在读vue3源码,感觉类型定义的好复杂呀
在ref.ts文件中
export type UnwrapRef = T extends Ref
? UnwrapRefSimple
: UnwrapRefSimple
这里T是一个泛型,infer用在extends语句中的推断,那么他的意思应该是Ref接收的泛型推断出来后存储在V中,
意思就是如果T也是个Ref对象,而且value的类型和V一样,那么条件成立,是这个意思吗?求老师解惑。
第二个问题就是
export type ToRef = [T] extends [Ref] ? T : Ref<UnwrapRef>
为啥是[T] extends [Ref]呢
和 T extends Ref有什么区别吗?
最后一个
这里在ref.ts中调用的toRaw(this),this应该指的的是ref对象实例吧,那他的身上其实没有第二张图上面的Raw属性,但是ref.value中可能会有。那么即便如此,通过代码逻辑来看,是不是也还是只会返回ref对象本身,而不会会ref.value做任何处理呢