求教vue3源码中不懂的地方?

image
我知道这个代码是对symbol类型的处理,但是这样的处理有什么作用?
还有就是 key => (Symbol as any)[key]我对这一句语法的理解也不太懂!

JS 内置了一些特殊的 Symbol(比如迭代器),表现上也相当于一个对象的属性,但这种属性是不能被收集响应依赖的,所以要排除掉它。这段代码就是确定哪些属性(Symbol)符合这个情况(从 Symbol 上获取类型为 Symbol 的属性)。

key => (Symbol as any)[key] 里,把 TS 的东西过滤掉就是 key => Symbol[key],这样就好理解了吧(访问 Symbol 对象的属性)。as any 的目的是为了防止 TS 编译器抱怨,因为从类型上 keySymbol 无关联,你直接拿 key 访问会让 TS 害怕访问到不存在的属性(毕竟 TS 看不懂你的代码)。

1 Like

谢谢,明白了!大佬讲的透彻!