feat: No Explicit Any (#8601)

## 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 <action@github.com>
Co-authored-by: Alexander Brown <drjkl@comfy.org>
This commit is contained in:
Johnpaul Chiwetelu
2026-02-12 00:13:48 +01:00
committed by GitHub
parent 92b7437d86
commit 4fc1d2ef5b
28 changed files with 242 additions and 151 deletions

View File

@@ -259,5 +259,5 @@ export interface ComfyExtension {
*/
onAuthUserLogout?(): Promise<void> | void
[key: string]: any
[key: string]: unknown
}

View File

@@ -7,8 +7,8 @@ export interface TreeNode extends PrimeVueTreeNode {
children?: this[]
}
export interface TreeExplorerNode<T = any> extends TreeNode {
data?: T
export interface TreeExplorerNode<T = unknown> extends TreeNode {
readonly data?: T
children?: this[]
icon?: string
/**
@@ -46,7 +46,7 @@ export interface TreeExplorerNode<T = any> extends TreeNode {
/** Function to handle dropping a node */
handleDrop?: (
this: TreeExplorerNode<T>,
data: TreeExplorerDragAndDropData
data: TreeExplorerDragAndDropData<T>
) => void | Promise<void>
/** Function to handle clicking a node */
handleClick?: (
@@ -58,10 +58,12 @@ export interface TreeExplorerNode<T = any> extends TreeNode {
/** Extra context menu items */
contextMenuItems?:
| MenuItem[]
| ((targetNode: RenderedTreeExplorerNode) => MenuItem[])
| ((targetNode: RenderedTreeExplorerNode<T>) => MenuItem[])
}
export interface RenderedTreeExplorerNode<T = any> extends TreeExplorerNode<T> {
export interface RenderedTreeExplorerNode<
T = unknown
> extends TreeExplorerNode<T> {
children?: this[]
icon: string
type: 'folder' | 'node'
@@ -73,7 +75,7 @@ export interface RenderedTreeExplorerNode<T = any> extends TreeExplorerNode<T> {
isEditingLabel?: boolean
}
export type TreeExplorerDragAndDropData<T = any> = {
export type TreeExplorerDragAndDropData<T = unknown> = {
type: 'tree-explorer-node'
data: RenderedTreeExplorerNode<T>
}