import type { ParserServices, ParserServicesWithTypeInformation } from '@typescript-eslint/utils';
import type { RuleContext, RuleListener, RuleMetaData } from '@typescript-eslint/utils/ts-eslint';
interface Metadata<TMessageIDs extends string, TOptions extends readonly unknown[]> extends RuleMetaData<TMessageIDs, TOptions> {
    hidden?: boolean;
}
export interface RuleModule<TResolvedOptions, TOptions extends readonly unknown[], TMessageIDs extends string, TRuleListener extends RuleListener> {
    readonly name: string;
    readonly meta: Metadata<TMessageIDs, TOptions>;
    resolveOptions?(...options: TOptions): TResolvedOptions;
    create(context: Readonly<RuleContext<TMessageIDs, TOptions>>, options: TResolvedOptions): TRuleListener;
}
export interface ExportedRuleModule<TOptions extends readonly unknown[] = unknown[], TMessageIDs extends string = string, TRuleListener extends RuleListener = RuleListener> {
    readonly name: string;
    readonly meta: Metadata<TMessageIDs, TOptions>;
    create(context: Readonly<RuleContext<TMessageIDs, TOptions>>): TRuleListener;
}
export type { RuleContext } from '@typescript-eslint/utils/ts-eslint';
export declare function createRule<TResolvedOptions, TOptions extends unknown[], TMessageIDs extends string, TRuleListener extends RuleListener = RuleListener>({ name, meta, create, resolveOptions }: RuleModule<TResolvedOptions, TOptions, TMessageIDs, TRuleListener>): any;
export declare function ensureParserWithTypeInformation(parserServices: Partial<ParserServices> | undefined): asserts parserServices is ParserServicesWithTypeInformation;
//# sourceMappingURL=rule.d.ts.map