import { Class } from 'ts-browser-helpers';
declare const jsPropTypes: {
    readonly string: "string";
    readonly number: "number";
    readonly boolean: "boolean";
    readonly object: "object";
};
export type JSPropTypes = (typeof jsPropTypes[keyof typeof jsPropTypes]) | `"${string}"` | `${number}` | `${boolean}`;
type KeyofPropType = string;
type ClassName = string;
interface PropTypeArray {
    arrayOf: TypedType;
    type: 'Array';
}
interface PropTypeObject {
    recordOf: Map<KeyofPropType, TypedType>;
    type: 'Object';
}
interface PropTypeUnion {
    oneOf: Set<TypedType>;
    type: 'Union';
}
export type TypedType = JSPropTypes | ClassName | 'null' | 'Object' | PropTypeUnion | PropTypeArray | PropTypeObject | {
    type: ClassName;
};
export interface TypedClass<T = any> {
    key: ClassName;
    getId: (obj: any) => string;
    ctor: Class<T>;
    getLabel?: (obj?: T) => string | any;
    getIcon?: (obj?: T) => string | any;
    setName?: (obj: T, name: string) => void;
}
export declare class TypeSystem {
    static Classes: Map<string, TypedClass<any>>;
    static AddClass(def: TypedClass): void;
    static GetClass(type: TypedType): TypedClass<any> | undefined;
    static GetClassType(ctor: Class<any>): ClassName | undefined;
    static GetType(v: any, allowSerializable?: boolean): TypedType | false;
    static NonLiteral(type: TypedType): TypedType;
    static TypeToString(type: TypedType): string;
    /**
     * Returns true if `tar = src` is valid
     * @param src
     * @param tar
     * @constructor
     */
    static CanAssign(src: TypedType, tar: TypedType): boolean;
}
export {};
//# sourceMappingURL=../../../src/plugins/extras/components/typeSystem.d.ts.map