From 4fc1d2ef5b3f702ceee3ad96ca750774e463a147 Mon Sep 17 00:00:00 2001 From: Johnpaul Chiwetelu <49923152+Myestery@users.noreply.github.com> Date: Thu, 12 Feb 2026 00:13:48 +0100 Subject: [PATCH] feat: No Explicit Any (#8601) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary - Add `typescript/no-explicit-any` rule to `.oxlintrc.json` to enforce no explicit `any` types - Fix all 40 instances of explicit `any` throughout the codebase - Improve type safety with proper TypeScript types ## Changes Made ### Configuration - Added `typescript/no-explicit-any` rule to `.oxlintrc.json` ### Type Fixes - Replaced `any` with `unknown` for truly unknown types - Updated generic type parameters to use `unknown` defaults instead of `any` - Fixed method `this` parameters to avoid variance issues - Updated component props to match new generic types - Fixed test mocks to use proper type assertions ### Key Files Modified - `src/types/treeExplorerTypes.ts`: Updated TreeExplorerNode interface generics - `src/platform/settings/types.ts`: Fixed SettingParams generic default - `src/lib/litegraph/src/LGraph.ts`: Fixed ParamsArray type constraint - `src/extensions/core/electronAdapter.ts`: Fixed onChange callbacks - `src/views/GraphView.vue`: Added proper type imports - Multiple test files: Fixed type assertions and mocks ## Test Plan - [x] All lint checks pass (`pnpm lint`) - [x] TypeScript compilation succeeds (`pnpm typecheck`) - [x] Pre-commit hooks pass - [x] No regression in functionality ┆Issue is synchronized with this [Notion page](https://www.notion.so/PR-8601-feat-add-typescript-no-explicit-any-rule-and-fix-all-instances-2fd6d73d365081fd9beef75d5a6daf5b) by [Unito](https://www.unito.io) --------- Co-authored-by: GitHub Action Co-authored-by: Alexander Brown --- .oxlintrc.json | 1 + src/components/common/TreeExplorer.vue | 92 ++++++++++--------- .../common/TreeExplorerTreeNode.vue | 22 +++-- .../sidebar/tabs/WorkflowsSidebarTab.vue | 3 +- .../nodeLibrary/NodeBookmarkTreeExplorer.vue | 6 +- .../tabs/nodeLibrary/NodeTreeFolder.vue | 2 +- .../tree/useTreeFolderOperations.ts | 18 ++-- src/constants/serverConfig.ts | 4 +- src/extensions/core/electronAdapter.ts | 2 +- src/extensions/core/slotDefaults.ts | 23 +++-- src/lib/litegraph/src/LGraph.ts | 13 +-- .../settings/components/ServerConfigPanel.vue | 4 +- .../settings/constants/coreSettings.ts | 24 +++-- src/platform/settings/settingStore.test.ts | 2 +- src/platform/settings/types.ts | 4 +- src/services/extensionService.ts | 35 ++++--- src/stores/imagePreviewStore.ts | 2 +- src/stores/modelToNodeStore.test.ts | 10 +- src/stores/modelToNodeStore.ts | 6 +- src/stores/queueStore.ts | 9 +- src/stores/serverConfigStore.test.ts | 18 ++-- src/types/comfy.ts | 2 +- src/types/treeExplorerTypes.ts | 14 +-- src/views/GraphView.vue | 3 +- .../manager/NodeConflictDialogContent.test.ts | 47 +++++++--- .../manager/PackVersionBadge.test.ts | 2 +- .../PackVersionSelectorPopover.test.ts | 14 ++- .../manager/button/PackEnableToggle.test.ts | 11 ++- 28 files changed, 242 insertions(+), 151 deletions(-) diff --git a/.oxlintrc.json b/.oxlintrc.json index 36eef37a96..677dc06916 100644 --- a/.oxlintrc.json +++ b/.oxlintrc.json @@ -96,6 +96,7 @@ "typescript/restrict-template-expressions": "off", "typescript/unbound-method": "off", "typescript/no-floating-promises": "error", + "typescript/no-explicit-any": "error", "vue/no-import-compiler-macros": "error", "vue/no-dupe-keys": "error" }, diff --git a/src/components/common/TreeExplorer.vue b/src/components/common/TreeExplorer.vue index 1f433177f4..fc7f111cad 100644 --- a/src/components/common/TreeExplorer.vue +++ b/src/components/common/TreeExplorer.vue @@ -12,9 +12,9 @@ nodeContent: ({ context }) => ({ class: 'group/tree-node', onClick: (e: MouseEvent) => - onNodeContentClick(e, context.node as RenderedTreeExplorerNode), + onNodeContentClick(e, context.node as RenderedTreeExplorerNode), onContextmenu: (e: MouseEvent) => - handleContextMenu(e, context.node as RenderedTreeExplorerNode) + handleContextMenu(e, context.node as RenderedTreeExplorerNode) }), nodeToggleButton: () => ({ onClick: (e: MouseEvent) => { @@ -36,15 +36,11 @@ -