From: Eduardo San Martin Morote Date: Tue, 19 Dec 2023 09:05:29 +0000 (+0100) Subject: fix(types): extract properties from extended collections (#9854) X-Git-Tag: v3.3.13~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=24b1c1dd57fd55d998aa231a147500e010b10219;p=thirdparty%2Fvuejs%2Fcore.git fix(types): extract properties from extended collections (#9854) close #9852 --- diff --git a/packages/dts-test/reactivity.test-d.ts b/packages/dts-test/reactivity.test-d.ts index 431bbafbdf..e0d8e207f0 100644 --- a/packages/dts-test/reactivity.test-d.ts +++ b/packages/dts-test/reactivity.test-d.ts @@ -77,6 +77,18 @@ describe('should unwrap Map correctly', () => { expectType(wm2.get({})!.wrap) }) +describe('should unwrap extended Map correctly', () => { + class ExtendendMap1 extends Map }> { + foo = ref('foo') + bar = 1 + } + + const emap1 = reactive(new ExtendendMap1()) + expectType(emap1.foo) + expectType(emap1.bar) + expectType(emap1.get('a')!.wrap) +}) + describe('should unwrap Set correctly', () => { const set = reactive(new Set>()) expectType>>(set) @@ -90,3 +102,14 @@ describe('should unwrap Set correctly', () => { const ws2 = reactive(new WeakSet<{ wrap: Ref }>()) expectType>(ws2) }) + +describe('should unwrap extended Set correctly', () => { + class ExtendendSet1 extends Set<{ wrap: Ref }> { + foo = ref('foo') + bar = 1 + } + + const eset1 = reactive(new ExtendendSet1()) + expectType(eset1.foo) + expectType(eset1.bar) +}) diff --git a/packages/reactivity/src/ref.ts b/packages/reactivity/src/ref.ts index a85c79c0bc..e156a2e113 100644 --- a/packages/reactivity/src/ref.ts +++ b/packages/reactivity/src/ref.ts @@ -500,13 +500,14 @@ export type UnwrapRefSimple = T extends | { [RawSymbol]?: true } ? T : T extends Map - ? Map> + ? Map> & UnwrapRef>> : T extends WeakMap - ? WeakMap> + ? WeakMap> & + UnwrapRef>> : T extends Set - ? Set> + ? Set> & UnwrapRef>> : T extends WeakSet - ? WeakSet> + ? WeakSet> & UnwrapRef>> : T extends ReadonlyArray ? { [K in keyof T]: UnwrapRefSimple } : T extends object & { [ShallowReactiveMarker]?: never }