import { DocsNode } from './Nodes';
import m from "mithril";
interface DocsGenericType {
    type: string;
    [field: string]: any;
}
export interface DocsNamedType extends DocsGenericType {
    type: string;
    name: string;
}
export interface DocsReferenceIdType extends DocsNamedType {
    id: number;
}
export interface DocsConstrainedType extends DocsNamedType {
    constraint: {
        operator: string;
        type: string;
        target: DocsNamedType;
    };
}
export interface DocsTargetType {
    type: "array";
    elementType: {
        type: string;
        name: string;
        constraint: DocsReferenceIdType;
    };
}
export declare class DocsType implements DocsReferenceIdType {
    static makeType(mdlType: DocsGenericType, node: DocsNode): DocsIntrinsicType | DocsArrayType | DocsReflectionType | DocsStringLiteralType | DocsReferenceType | DocsTupleType | DocsUnionType | DocsTypeParameterType | DocsTypeOperatorType | DocsQueryType | DocsIndexedAccessType | DocsPredicateType | DocsUnknownType;
    type: string;
    name: string;
    node: DocsNode;
    id: number;
    declaration: DocsNode;
    constructor(mdlType: DocsGenericType, node: DocsNode);
    mType(): m.Vnode<any, any>;
}
declare class DocsIntrinsicType extends DocsType {
    name: string;
    constructor(mdlType: DocsGenericType, node: DocsNode);
    mType(): m.Vnode<any, any>;
}
declare class DocsReferenceType extends DocsType {
    typeArguments: DocsType[];
    constructor(mdlType: DocsGenericType, node: DocsNode);
    mType(): m.Vnode<any, any>;
}
declare class DocsUnknownType extends DocsType {
    name: string;
    constructor(mdlType: DocsGenericType, node: DocsNode);
    mType(): m.Vnode<any, any>;
}
declare class DocsStringLiteralType extends DocsType {
    value: string;
    constructor(mdlType: DocsGenericType, node: DocsNode);
    mType(): m.Vnode<any, any>;
}
declare class DocsArrayType extends DocsType {
    elementType: DocsType;
    constructor(mdlType: DocsGenericType, node: DocsNode);
    mType(): m.Vnode<any, any>;
}
declare class DocsTypeParameterType extends DocsType {
    constraint: DocsNamedType | DocsTypeOperatorType;
    constructor(mdlType: DocsGenericType, node: DocsNode);
    mType(): m.Vnode<any, any>;
}
declare class DocsTypeOperatorType extends DocsType {
    operator: string;
    target: DocsNamedType;
    constructor(mdlType: DocsGenericType, node: DocsNode);
    mType(): m.Vnode<any, any>;
}
declare class DocsReflectionType extends DocsType {
    constructor(mdlType: DocsGenericType, node: DocsNode);
    mType(): m.Vnode<any, any>;
}
declare class DocsTupleType extends DocsType {
    elements: DocsType[];
    constructor(mdlType: DocsGenericType, node: DocsNode);
    mType(): m.Vnode<any, any>;
}
declare class DocsUnionType extends DocsType {
    types: DocsReferenceIdType[];
    constructor(mdlType: DocsGenericType, node: DocsNode);
    mType(): m.Vnode<any, any>;
}
declare class DocsQueryType extends DocsType {
    queryType: DocsReferenceIdType;
    constructor(mdlType: DocsGenericType, node: DocsNode);
    mType(): m.Vnode<any, any>;
}
declare class DocsIndexedAccessType extends DocsType {
    indexType: DocsConstrainedType;
    objectType: DocsNamedType;
    constructor(mdlType: DocsGenericType, node: DocsNode);
    mType(): m.Vnode<any, any>;
}
declare class DocsPredicateType extends DocsType {
    targetType: DocsTargetType;
    constructor(mdlType: DocsGenericType, node: DocsNode);
    mType(): m.Vnode<any, any>;
}
export {};
