import { Field } from "./field";
import { Operator } from "./operator";
import { ReferenceType } from "./reference_type";
import { RelationshipType } from "./relationship_type";
import { FieldTypeAnalyzer } from "../analyzer/field_type";
export declare class FieldPairing {
    field: Field;
    fieldType: FieldType;
    constructor(field: Field, fieldType: FieldType);
}
export declare abstract class FieldType {
    constructor();
    get analyzer(): FieldTypeAnalyzer;
    get isBooleanLike(): boolean;
    get isDateLike(): boolean;
    get isNullable(): boolean;
    get isListLike(): boolean;
    get isHasManyListLike(): boolean;
    get isHasOneListLike(): boolean;
    get isEnumLike(): boolean;
    get enumValues(): string[];
    find(predicate: (fieldType: FieldType) => boolean): FieldType | void;
    any(predicate: (fieldType: FieldType) => boolean): boolean;
    withOps(...operators: [Operator, ...Operator[]]): FieldType.WithOperators;
    pairedWith(...fields: [Field, ...Field[]]): FieldType.PairedWith;
    or(other: FieldType): FieldType.Multiple;
}
export declare namespace FieldType {
    class Nullable extends FieldType {
        toString(): string;
    }
    class StringLike extends FieldType {
        toString(): string;
    }
    class NumberLike extends FieldType {
        toString(): string;
    }
    class DateLike extends FieldType {
        toString(): string;
    }
    class BooleanLike extends FieldType {
        toString(): string;
    }
    class ListLike extends FieldType {
        relationshipType: RelationshipType;
        fieldType: FieldType;
        constructor(relationshipType: RelationshipType, fieldType: FieldType);
        toString(): string;
    }
    class EnumLike extends FieldType {
        values: string[];
        constructor(values: string[]);
        toString(): string;
    }
    class StringEnumLike extends FieldType {
        values: string[];
        constructor(values: string[]);
        toString(): string;
    }
    class ReferenceLike extends FieldType {
        referenceType: ReferenceType;
        constructor(referenceType: ReferenceType);
        toString(): "`Username` (example: `@username`)" | "`Milestone` (example: `%Backlog`)" | "`Label` (example: `~frontend`)" | "`Iteration` (example: `*iteration:25263`" | "`Epic` (example: `&123` or `group-path&123`)";
    }
    class PairedWith extends FieldType {
        fieldType: FieldType;
        fields: Field[];
        constructor(fieldType: FieldType, fields: Field[]);
        toString(): string;
    }
    class WithOperators extends FieldType {
        fieldType: FieldType;
        operators: Operator[];
        constructor(fieldType: FieldType, operators: Operator[]);
        toString(): string;
    }
    class Multiple extends FieldType {
        fieldTypes: FieldType[];
        constructor(fieldTypes: FieldType[]);
        toString(): string;
    }
    class UnknownFieldType extends FieldType {
        toString(): string;
    }
}
