Vue3源码的类型声明,有些不理解
来源:9-6 改进路由验证系统
有没有没被占用的昵称
2021-04-18
老师非常不好意思,又来麻烦你了
我最近在读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做任何处理呢
写回答
1回答
-
同学你好 第一个问题:infer 在 extends 合用标示将要推断的类型,这句话的意思就是假如 T 是 Ref 类型,那么返回 UnwrapRefSimple<V>,这个 V 是 T 里面的 value 的类型,假如不是 Ref 类型,那直接返回 UnwrapRefSimple<T>
第二个:我本地定义文件是
declare type ToRef<T> = T extends Ref ? T : Ref<UnwrapRef<T>>; 不知道你这个数组类型从哪里来的?
第三个:涉及源代码问题 并没有细读源代码 比较耗时 晚点再回复你啦
032021-04-22
相似问题