From bfb045f1007b922d637d4ec8211bfc57557e2443 Mon Sep 17 00:00:00 2001 From: Young Liang Date: Mon, 5 Sep 2022 18:05:01 +0800 Subject: [PATCH 1/2] fix(useArrayMap): allow return type matches the mapper function fix [#2159](https://github.com/vueuse/vueuse/issues/2159) --- packages/shared/useArrayMap/index.test.ts | 12 ++++++++++++ packages/shared/useArrayMap/index.ts | 6 +++--- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/packages/shared/useArrayMap/index.test.ts b/packages/shared/useArrayMap/index.test.ts index 1e10eca3111..d724e464e06 100644 --- a/packages/shared/useArrayMap/index.test.ts +++ b/packages/shared/useArrayMap/index.test.ts @@ -26,4 +26,16 @@ describe('useArrayMap', () => { list.value.pop() expect(result.value).toStrictEqual([0, 2, 4, 6]) }) + + it('should match the return type of mapper function', () => { + const list = ref([0, 1, 2, 3]) + const result1 = useArrayMap(list, i => i.toString()) + result1.value.forEach(i => expect(i).toBeTypeOf('string')) + + const result2 = useArrayMap(list, i => ({ value: i })) + result2.value.forEach((item, idx) => { + expect(item).toBeTypeOf('object') + expect(item).toHaveProperty('value', idx) + }) + }) }) diff --git a/packages/shared/useArrayMap/index.ts b/packages/shared/useArrayMap/index.ts index 33d1a04fff2..7bdca057cc0 100644 --- a/packages/shared/useArrayMap/index.ts +++ b/packages/shared/useArrayMap/index.ts @@ -12,9 +12,9 @@ import { resolveUnref } from '../resolveUnref' * * @returns {Array} a new array with each element being the result of the callback function. */ -export function useArrayMap( +export function useArrayMap( list: MaybeComputedRef[]>, - fn: (element: T, index: number, array: T[]) => T, -): ComputedRef { + fn: (element: T, index: number, array: T[]) => U, +): ComputedRef { return computed(() => resolveUnref(list).map(i => resolveUnref(i)).map(fn)) } From ad532cf33ddf218b86c17ff75d4e1a5eb12e61e5 Mon Sep 17 00:00:00 2001 From: Young Liang Date: Mon, 5 Sep 2022 19:08:04 +0800 Subject: [PATCH 2/2] type(useArrayMap): set default value `T` to generics `U` --- packages/shared/useArrayMap/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/shared/useArrayMap/index.ts b/packages/shared/useArrayMap/index.ts index 7bdca057cc0..85df85d3b42 100644 --- a/packages/shared/useArrayMap/index.ts +++ b/packages/shared/useArrayMap/index.ts @@ -12,7 +12,7 @@ import { resolveUnref } from '../resolveUnref' * * @returns {Array} a new array with each element being the result of the callback function. */ -export function useArrayMap( +export function useArrayMap( list: MaybeComputedRef[]>, fn: (element: T, index: number, array: T[]) => U, ): ComputedRef {