export interface FunctionType {
    type: "Function";
    id?: string;
    params?: Parameter[];
    returns?: ReturnType;
}
export interface ArrayType {
    type: "Array";
    typeParams: [Type];
}
export interface ObjectType {
    type: "Object";
    properties: {
        [propertyName: string]: Property;
    };
}
export interface OtherType {
    type: string;
    typeParams?: Type[];
}
export declare type Type = FunctionType | ArrayType | ObjectType | OtherType;
export interface ParameterArgs {
    rest?: boolean;
    name?: string;
    optional?: boolean;
}
export declare type Parameter = Type & ParameterArgs;
export declare type ReturnType = Type & {
    optional?: boolean;
};
export declare type Property = Type & {
    optional?: boolean;
};
export declare function isFunction(t: Type): t is FunctionType;
export declare function isArray(t: Type): t is ArrayType;
export declare function isObject(t: Type): t is ObjectType;
export declare function isOther(t: Type): t is OtherType;
export interface ClassOrInterfaceDeclaration {
    type: "class" | "interface";
    typeParams?: Type[];
    extends?: Type;
    properties?: {
        [propName: string]: Property;
    };
    staticProperties?: {
        [propName: string]: Property;
    };
}
export declare type Declaration = ClassOrInterfaceDeclaration | Type;
export declare function isClassOrInterfaceDeclaration(decl: Declaration): decl is ClassOrInterfaceDeclaration;
export interface ModuleContents {
    items?: {
        [name: string]: Declaration;
    };
    all?: {
        [id: string]: Declaration;
    };
}
