关于Vue3源码中有个类型Omit>?-灵析社区

你好我叫张倩话

在vue3的源码里有这么一个类型 type UnwrapRefSimple = T extends Function | BaseTypes | Ref | RefUnwrapBailTypes[keyof RefUnwrapBailTypes] | { [RawSymbol]?: true; } ? T : T extends Map ? Map> & UnwrapRef>> : T extends WeakMap ? WeakMap> & UnwrapRef>> : T extends Set ? Set> & UnwrapRef>> : T extends WeakSet ? WeakSet> & UnwrapRef>> : T extends ReadonlyArray ? { [K in keyof T]: UnwrapRefSimple; } : T extends object & { [ShallowReactiveMarker]?: never; } ? { [P in keyof T]: P extends symbol ? T[P] : UnwrapRef; } : T; 这里当`UnwrapRefSimple>`时,会有一步是`Omit>`,也就是 Omit, keyof Map> 这一步得到的结果不是{}吗? 也就是当`UnwrapRefSimple>`最终得到的类型是 Map & Omit, keyof Map> 即`Map & {}` 为什么要和{}交叉类型呢?

阅读量:185

点赞量:0

问AI
"keyof" 是获取目标类型上的所有"成员字段"组成的"联合类型" // 其实就是获取 Map 上的所有属性和方法组成的集合 type Keys = keyof Map // has | get | set | keys | ... "image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241013/a050b20397a3684945672f8b43215993.png) "T extends Map" 则说明 "T" 是一个 "mapLike", 可能会有多的属性和方法,T 是一个 Map 只是情况之一 所以这里当 "T" 是 "Map" 的时候,得到的就是 "Map",如果是 "MapLike",就是对应 "MapLike" 的类型 Map> & UnwrapRef>>