import type { Decl } from "./declaration";
import type { Expr } from "./expression";
import type { FunctionlessNode } from "./node";
import type { NodeInstance } from "./node-ctor";
import { NodeKind } from "./node-kind";
import type { Stmt } from "./statement";
export declare type Assertion = "undefined" | "null" | "bigint" | "boolean" | "number" | "string" | "function" | "Node" | "Expr" | "Stmt" | "Decl" | NodeKind;
export declare type AssertionToInstance<A extends Assertion> = ({
    undefined: undefined;
    null: null;
    boolean: boolean;
    bigint: bigint;
    number: number;
    string: string;
    function: (...args: any[]) => any;
    Node: FunctionlessNode;
    Expr: Expr;
    Stmt: Stmt;
    Decl: Decl;
} & {
    [kind in NodeKind]: NodeInstance<kind>;
})[A];
export declare function ensureArrayOf<Assert extends Assertion>(nodeKind: NodeKind, arr: any[], fieldName: string, assertions: Assert[] | readonly Assert[]): asserts arr is AssertionToInstance<Assert>[];
export declare function ensure<Assert extends Assertion>(nodeKind: NodeKind, item: any, fieldName: string, assertions: Assert[] | readonly Assert[]): asserts item is AssertionToInstance<Assert>;
//# sourceMappingURL=ensure.d.ts.map