Road to No Explicit Any Part 7: Scripts and Dialog Cleanup (#8092)

## Summary

Continues the TypeScript strict typing improvements by removing `any`
types from core scripts and dialog components.

### Changes

**api.ts (6 instances)**
- Define `V1RawPrompt` and `CloudRawPrompt` tuple types for queue prompt
formats
- Export `QueueIndex`, `PromptInputs`, `ExtraData`, `OutputsToExecute`
from apiSchema
- Type `#postItem` body, `storeUserData` data, and `getCustomNodesI18n`
return

**groupNodeManage.ts (all @ts-expect-error removed)**
- Add `GroupNodeConfigEntry` interface to LGraph.ts
- Extend `GroupNodeWorkflowData` with `title`, `widgets_values`, and
typed `config`
- Type all class properties with definite assignment assertions
- Type all method parameters and event handlers
- Fix save button callback with proper generic types for node ordering

**changeTracker.ts (4 instances)**
- Type `nodeOutputs` as `Record<string, ExecutedWsMessage['output']>`
- Type prompt callback with `CanvasPointerEvent` and proper value types

**asyncDialog.ts and dialog.ts**
- Make `ComfyAsyncDialog` generic with `DialogAction<T>` type
- Type `ComfyDialog` constructor and show method parameters
- Update `ManageGroupDialog.show` signature to match base class

## Test plan
- [x] `pnpm typecheck` passes
- [x] `pnpm lint` passes
- [x] Sourcegraph checks for external usage

---
Related: Continues from #8083

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-8092-Road-to-No-Explicit-Any-Part-7-Scripts-and-Dialog-Cleanup-2ea6d73d365081fbb890e73646a6ad16)
by [Unito](https://www.unito.io)
This commit is contained in:
Johnpaul Chiwetelu
2026-01-20 01:41:40 +01:00
committed by GitHub
parent d5f17f7d9f
commit 7ef4ea6f25
9 changed files with 294 additions and 278 deletions

View File

@@ -22,6 +22,7 @@ import type {
} from '@/platform/workflow/validation/schemas/workflowSchema'
import type {
AssetDownloadWsMessage,
CustomNodesI18n,
EmbeddingsResponse,
ExecutedWsMessage,
ExecutingWsMessage,
@@ -35,6 +36,7 @@ import type {
LogsRawResponse,
LogsWsMessage,
NotificationWsMessage,
PreviewMethod,
ProgressStateWsMessage,
ProgressTextWsMessage,
ProgressWsMessage,
@@ -44,8 +46,7 @@ import type {
StatusWsMessageStatus,
SystemStats,
User,
UserDataFullInfo,
PreviewMethod
UserDataFullInfo
} from '@/schemas/apiSchema'
import type {
JobDetail,
@@ -951,7 +952,7 @@ export class ComfyApi extends EventTarget {
* @param {*} type The endpoint to post to
* @param {*} body Optional POST data
*/
async #postItem(type: string, body: any) {
async #postItem(type: string, body?: Record<string, unknown>) {
try {
await this.fetchApi('/' + type, {
method: 'POST',
@@ -1074,7 +1075,7 @@ export class ComfyApi extends EventTarget {
*/
async storeUserData(
file: string,
data: any,
data: unknown,
options: RequestInit & {
overwrite?: boolean
stringify?: boolean
@@ -1091,7 +1092,7 @@ export class ComfyApi extends EventTarget {
`/userdata/${encodeURIComponent(file)}?overwrite=${options.overwrite}&full_info=${options.full_info}`,
{
method: 'POST',
body: options?.stringify ? JSON.stringify(data) : data,
body: options?.stringify ? JSON.stringify(data) : (data as BodyInit),
...options
}
)
@@ -1251,7 +1252,7 @@ export class ComfyApi extends EventTarget {
*
* @returns The custom nodes i18n data
*/
async getCustomNodesI18n(): Promise<Record<string, any>> {
async getCustomNodesI18n(): Promise<CustomNodesI18n> {
return (await axios.get(this.apiURL('/i18n'))).data
}