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..85df85d3b42 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)) }