From f227cc39f6590ddbefd212027d2ccc3f1c54f8c2 Mon Sep 17 00:00:00 2001 From: Nicolas Merget Date: Wed, 17 Dec 2025 22:25:45 +0100 Subject: [PATCH] chore: update codegen docs --- .../auto-completion-and-codegen.md | 38 ++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/docs/documentation/godot-js-scripts/auto-completion-and-codegen.md b/docs/documentation/godot-js-scripts/auto-completion-and-codegen.md index cebc419..9559f03 100644 --- a/docs/documentation/godot-js-scripts/auto-completion-and-codegen.md +++ b/docs/documentation/godot-js-scripts/auto-completion-and-codegen.md @@ -8,14 +8,50 @@ Example given `ResourceLoader.load()` will autocomplete like this: ![Resource Loader load auto complete](images/codegen/resource-loader.png) +## SceneNodes + +For every scene node, a generated `*.nodes.gen.d.ts` file will be created in the `/gen/godot` subdirectory. + +Example given a `Main.tscn` file with a `Button` and `Label` child node will look like this: + +```ts +declare module "godot" { + interface SceneNodes { + "scenes/Main.tscn": { + Button: Button<{}>; + Label: Label<{}>; + }; + } +} +``` + +If you want to use this scene node inside you script you can do it like this: + +```ts +// src/scenes/main.ts +import { Label, Node, SceneNodes } from "godot"; + +export default class Main extends Node { + label: Label | undefined; + + _ready(): void { + this.label = this.get_node("Label"); + } +} +``` + +With this, `this.label` will be correctly typed as `Label`, no need for `as Label` or `