withastro/astro

defineCollection and other declarations missing from generated types for "astro:content" module

Opened this issue · 2 comments

Astro Info

Astro                    v4.16.12
Node                     v23.2.0
System                   macOS (arm64)
Package Manager          yarn
Output                   static
Adapter                  none
Integrations             none

If this issue only occurs in one browser, which browser is a problem?

No browser; this is a development issue

Describe the Bug

With a minimal project using yarn 4.5.1, Astro 4.16.12 and the latest official VSCode Astro extension, I'm getting an error in my src/content/config.ts file when I try to do the following import:

import { defineCollection, z } from "astro:content";

This is the error I see:

Module '"astro:content"' has no exported member 'defineCollection'.ts(2305)

I can confirm that, indeed, the defineCollection and z declarations are missing from the .astro/astro/content.d.ts typing file. (I can share the contents of that file if desired, but you should be able to reproduce with my sample.)

I've linked a minimal reproduction. To initialize the project, I just ran yarn init -2, added the relevant Astro dev dependencies, and pasted in a few filler content files. I see the same issue whether I put everything into dependencies or devDependencies in my package.json, so it does not appear to be a dev-vs-runtime dependency issue.

Note that I wasn't able to insert slashes (/) into the gist files, so I've replaced those with underscores (_).

I've also run astro sync, astro check, and astro build. All result in the same VSCode type error. I am able to successfully build and view the website.

Finally, the closest previous issue I could find to this one was #5711, which seems to be complaining that the module doesn't exist at all. This is not what I'm seeing; instead, I'm seeing that not all of the module exports are getting into the declaration file.

What's the expected result?

The .astro/astro/content.d.ts should contain all relevant typings and should allow type checking of collection schemas.

Link to Minimal Reproducible Example

https://gist.github.com/bsidhom/88417490e8dc651a17f1608c5af3067c

Participation

  • I am willing to submit a pull request for this issue.

I do have the same issue.

Astro                    v4.16.12
Node                     v22.11.0
System                   Linux (arm64)
Package Manager          pnpm
Output                   server
Adapter                  @astrojs/node
Integrations             @astrojs/react
                         @astrojs/mdx

Worth to mention that the build works perfectly, it's just in Vscode.

Also here is what eslint says:

> eslint .


/workspaces/website/.astro/astro/content.d.ts
    4:46  error  The `{}` ("empty object") type allows any non-nullish value, including literals like `0` and `""`.
- If that's what you want, disable this lint rule with an inline comment or configure the 'allowObjectTypes' rule option.
- If you want a type meaning "any object", you probably want `object` instead.
- If you want a type meaning "any value", you probably want `unknown` instead  @typescript-eslint/no-empty-object-type
    6:44  error  Unexpected any. Specify a different type                                                                                                                                                                                                                                                                                                                                                   @typescript-eslint/no-explicit-any
    7:44  error  The `{}` ("empty object") type allows any non-nullish value, including literals like `0` and `""`.
- If that's what you want, disable this lint rule with an inline comment or configure the 'allowObjectTypes' rule option.
- If you want a type meaning "any object", you probably want `object` instead.
- If you want a type meaning "any value", you probably want `unknown` instead  @typescript-eslint/no-empty-object-type
   16:43  error  Unexpected any. Specify a different type                                                                                                                                                                                                                                                                                                                                                   @typescript-eslint/no-explicit-any
   40:34  error  Unexpected any. Specify a different type                                                                                                                                                                                                                                                                                                                                                   @typescript-eslint/no-explicit-any
  148:53  error  Unexpected any. Specify a different type                                                                                                                                                                                                                                                                                                                                                   @typescript-eslint/no-explicit-any

/workspaces/website/.astro/types.d.ts
  2:1  error  Do not use a triple slash reference for astro/content.d.ts, use `import` style instead  @typescript-eslint/triple-slash-reference

✖ 7 problems (7 errors, 0 warnings)

Ah anyway, I figured out I forgot to include "include": ["./src/**/*.astro"] in my tsconfig.json. Now it works like a charm, sorry for the noise.