Type declarations with `addServerTemplate` in a module
When using addServerTemplate, how should I add type declarations?
The docs here only explain how to do this for
addTemplate
.
Thanks!Nuxt
Module Author Guide · Nuxt Advanced v4
Learn how to create a Nuxt Module to integrate, enhance or extend any Nuxt applications.
11 Replies
Hi @rd. I'm kapa.ai, your friendly support bot. I will try to answer your question by searching through the knowledge base. :wave:
----------------------
When using
- Use
addServerTemplate
in a Nuxt module, the official documentation does not provide a direct method for adding type declarations specifically for server templates. The documented approach for type declarations is with addTypeTemplate
, which is designed to generate .d.ts
files and register them for type augmentation in both Nuxt and Nitro contexts. This is separate from addServerTemplate
, which is used to generate server-only virtual files for Nitro and does not handle type declarations by itself.
If you want to add type declarations for code generated with addServerTemplate
, you should use addTypeTemplate
to generate the corresponding .d.ts
file. You can control whether the type is available in the Nuxt context, the Nitro context, or both by passing the appropriate options to addTypeTemplate
:
This way, your server template is available for import in server code, and the type declaration is available for type checking and IDE support in the Nitro context addTypeTemplate API docs.
Summary:- Use
addServerTemplate
to generate server-only virtual files.
- Use addTypeTemplate
to generate and register type declarations for those files, specifying { nitro: true }
if you want the types available in the server context.
The documentation does not mention any other method for associating type declarations with files generated by addServerTemplate
addServerTemplate API docs.
----------------------
Note: you can ask me a follow up question by @ mentioning me again :speech_balloon:
----------------------<@336916275705937921> Kapa.ai is still learning and improving, please let me know how I did by reacting below.
@kapa.ai So, this should work? Can't seem to make it
Let me check the knowledge base for you again. One moment! :books:
----------------------
Based on the official Nuxt documentation and related sources, your approach is correct in principle: you should use
The module path in your type declaration (
The
Ensure your type template is placed in a directory that Nuxt recognizes for type augmentation (e.g.,
After making changes to templates or types, always restart your Nuxt dev server to ensure the virtual files and types are regenerated and picked up by the IDE and build process. Example (adjusted): Summary:
- Your approach matches the documented pattern. - Remove
addServerTemplate
to generate the server-only virtual file, and addTypeTemplate
to generate the corresponding type declaration, specifying { nitro: true }
to make the type available in the Nitro (server) context addTypeTemplate API docs.
However, there are a few things to double-check:
1. Module Path Consistency:The module path in your type declaration (
#nitro-build-info
) must match exactly how you import the file in your server code. Since your addServerTemplate
uses filename: 'nitro-build-info.mjs'
, you should import it as #nitro-build-info
(without the .mjs
extension) in your server files.
2. Type Template Context:The
node
option in the context object is not documented in the official Nuxt 4 docs. Only nuxt
and nitro
are supported contexts according to the documentation. Using node: true
may not have any effect and could potentially cause issues. Stick to { nitro: true }
for server context types addTypeTemplate API docs.
3. Type Template Location:Ensure your type template is placed in a directory that Nuxt recognizes for type augmentation (e.g.,
types/
).
4. Rebuild and Restart:After making changes to templates or types, always restart your Nuxt dev server to ensure the virtual files and types are regenerated and picked up by the IDE and build process. Example (adjusted): Summary:
- Your approach matches the documented pattern. - Remove
node: true
from the context, as it is not documented.
- Make sure you import the module as #nitro-build-info
in your server code.
- Restart your dev server after changes.
If it still doesn't work, the knowledge sources do not provide further troubleshooting steps for this specific scenario. If you encounter issues, double-check the generated files in .nuxt
and ensure your IDE is picking up the new types addTypeTemplate API docs.
----------------------
Note: you can ask me a follow up question by @ mentioning me again :speech_balloon:
----------------------<@336916275705937921> Kapa.ai is still learning and improving, please let me know how I did by reacting below.
@kapa.ai of course! Thanks.
Let me check the knowledge base for you again. One moment! :books:
----------------------
Your approach is almost correct, but there are a couple of important details to ensure it works as intended, based strictly on the Nuxt documentation:
1. Filename for
The
The
When importing in your server code, use
- Do not prefix the filename in
addServerTemplate
:The
filename
should not start with a #
. The #
prefix is used when importing the virtual file, not when defining it. For example, use 'nitro-build-info.mjs'
as the filename in addServerTemplate
. When importing, you would use #nitro-build-info
.
2. Type Template Context:The
addTypeTemplate
context only officially supports nuxt
and nitro
as options. There is no documentation for a node
context, so you should omit node: true
and use only { nitro: true }
if you want the type available in the Nitro (server) context addTypeTemplate API docs.
3. Import Path:When importing in your server code, use
#nitro-build-info
(without the .mjs
extension).
Corrected Example:
You can then import in your server code like this:
Summary:- Do not prefix the filename in
addServerTemplate
with #
.
- Only use { nitro: true }
for the type template context.
- Import using the #
prefix in your server code.
This matches the documented usage for both addServerTemplate
and addTypeTemplate
addServerTemplate API docs addTypeTemplate API docs.
----------------------
Note: you can ask me a follow up question by @ mentioning me again :speech_balloon:
----------------------<@336916275705937921> Kapa.ai is still learning and improving, please let me know how I did by reacting below.
@kapa.ai Follow up... addServerTemplate doesn't support
src
like addTemplate. Why?Let me check the knowledge base for you again. One moment! :books:
----------------------
The knowledge sources do not explicitly state why
addServerTemplate
does not support a src
property like addTemplate
. The documentation for addServerTemplate
only describes the use of filename
and getContents
, and does not mention support for a src
option or provide reasoning for this design choice addServerTemplate API docs.
If you need to generate server templates from a file, you would need to manually read the file contents and provide them to getContents
. There is no documented explanation for the absence of a src
property in addServerTemplate
.
----------------------
Note: you can ask me a follow up question by @ mentioning me again :speech_balloon:
----------------------<@336916275705937921> Kapa.ai is still learning and improving, please let me know how I did by reacting below.