import { type TSESTree } from "@typescript-eslint/types";
import { nodeTypes } from "@flint/infra/analysis/function-analysis";
type NodeType = typeof nodeTypes.functionDeclaration | typeof nodeTypes.functionExpression | typeof nodeTypes.arrowFunctionExpression | typeof nodeTypes.variableDeclarator | typeof nodeTypes.TSMethodSignature | typeof nodeTypes.TSTypeAliasDeclaration | typeof nodeTypes.TSTypeAnnotation | typeof nodeTypes.TSPropertySignature | typeof nodeTypes.callExpression | typeof nodeTypes.newExpression | typeof nodeTypes.methodDefinition;
type Node = TSESTree.FunctionDeclaration | TSESTree.FunctionExpression | TSESTree.ArrowFunctionExpression | TSESTree.VariableDeclarator | TSESTree.TSMethodSignature | TSESTree.TSTypeAliasDeclaration | TSESTree.TSTypeAnnotation | TSESTree.TSPropertySignature | TSESTree.CallExpression | TSESTree.NewExpression | TSESTree.MethodDefinition;
export declare function createNodeVisitor<T extends NodeType, N extends Extract<Node, {
    type: T;
}>>(handler: (node: N) => void, types?: T[]): Record<string, (node: N) => void>;
export {};
