declare type Type = new (...args: any[]) => any;
declare class _TypeStore {
    private _types;
    private _reverseTypes;
    private _lazyLoaders;
    constructor();
    /**
     * add a type to the store
     */
    add(key: string, type: Type): void;
    /**
     * Register a lazy-loadable type. The loader is called on first use via {@link getAsync}.
     * Once resolved, the type is cached for synchronous access via {@link get}.
     */
    addLazy(key: string, loader: () => Promise<Type>): void;
    /**
     * @returns the type for the given key if registered
     */
    get(key: string): Type | null;
    /**
     * Async version of {@link get} that also resolves lazy-registered types.
     * After resolving, the type is cached for future synchronous access.
     */
    getAsync(key: string): Promise<Type | null>;
    /**
     * @returns the key/name for the given type if registered
     */
    getKey(type: Type): string | null;
}
export declare const $BuiltInTypeFlag: unique symbol;
export declare const TypeStore: _TypeStore;
/**
 * add to a class declaration to automatically register it to the TypeStore (required for HMR right now)
 *
 * `@registerType`
 *
 * `export class MyType extends Behaviour { ... }`
 */
export declare const registerType: (constructor: Type) => void;
export {};
