export declare type DiscriminateUnion = T extends Record ? T : never; export interface EnterExitVisitor { enter?: (node: T, path: B[], scope: S) => R; exit?: (node: T, path: B[], scope: S) => R; } interface TaggedInterface { type: E; } export declare type GenericVisitor, State, Ret> = { [key in Enum]?: EnterExitVisitor, NodeType, State, Ret>; }; export declare function enterNode, State, Ret>(node: NodeType, visitors: GenericVisitor[], path: NodeType[], scope: State): Ret | undefined; export declare function exitNode, State, Ret>(node: NodeType, visitors: GenericVisitor[], path: NodeType[], scope: State): Ret | undefined; export {};