import { ABISerializable, ABISerializableConstructor, ABISerializableObject, ABISerializableType, ABITypeDescriptor } from "../serializer/Serializable.js";
export interface VariantConstructor extends ABISerializableConstructor {
    new <T extends Variant>(...args: any[]): T;
}
export type AnyVariant = Variant | ABISerializable | [string, any];
export declare class Variant implements ABISerializableObject {
    static abiName: string;
    static abiVariant: ABITypeDescriptor[];
    static from<T extends VariantConstructor>(this: T, object: AnyVariant): InstanceType<T>;
    static from(object: AnyVariant): unknown;
    value: ABISerializable;
    variantIdx: number;
    /** @internal */
    constructor(variant: [string, ABISerializable]);
    /**
     * Return true if this variant equals the other.
     *
     * Note: This compares the ABI encoded bytes of both variants, subclasses
     *       should implement their own fast equality check when possible.
     */
    equals(other: AnyVariant): boolean;
    get variantName(): string;
    /** @internal */
    toJSON(): ABISerializable[];
}
export declare namespace Variant {
    function type(name: string, types: ABISerializableType[]): <T extends VariantConstructor>(variant: T) => T;
}
//# sourceMappingURL=Variant.d.ts.map