nuxt / module-builder

Complete solution to build and ship Nuxt modules.
MIT License
212 stars 22 forks source link

Type definitions are incorrect when importing useAsyncData from #imports #233

Closed cjpearson closed 2 months ago

cjpearson commented 3 months ago

Environment


Reproduction

The issue can be reproduced by adding this sample composable to the starter nuxt module. e.g. npx nuxi init -t module quick-test

src/runtime/composables/useHelloWorld.ts

import { useAsyncData } from '#imports'

export async function useHelloWorld() {
  const {
    data,
  } = await useAsyncData(
    'use-hello-world',
    () => Promise.resolve({ hello: 'world'}),
  )

  return {
    data,
  }
}

Run yarn nuxt-module-build build && cat dist/runtime/composables/useHelloWorld.d.ts which produces the following output:

export declare function useHelloWorld(): Promise<{
    data: any;
}>;

If the import is changed to use nuxt/app, the output is correct:

export declare function useHelloWorld(): Promise<{
    data: import("vue").Ref<{
        hello: string;
    } | null>;
}>;

Describe the bug

When using useAsyncData inside a module, the compiled type definitions are incorrect if useAsyncData is imported from #imports. Changing the import to import { useAsyncData } from 'nuxt/app' resolves the issue, but my understanding is that '#imports' is preferred.

Additional context

No response

Logs

No response

danielroe commented 2 months ago

Resolved in https://github.com/nuxt/module-builder/pull/255.