/// <reference types="@typescript-to-lua/language-extensions" />
import type { DefaultMap } from "../classes/DefaultMap";
import type { TSTLClassMetatable } from "../interfaces/TSTLClassMetatable";
import type { TSTLClass } from "../types/TSTLClass";
/**
 * Helper function to get the constructor from an instantiated TypeScriptToLua class, which is
 * located on the metatable.
 *
 * Returns undefined if passed a non-table or if the provided table does not have a metatable.
 */
export declare function getTSTLClassConstructor(object: unknown): TSTLClassMetatable["constructor"] | undefined;
/**
 * Helper function to get the name of a TypeScriptToLua class from the instantiated class object.
 *
 * TSTL classes are Lua tables created with the `__TS__Class` Lua function from the TSTL lualib.
 * Their name is contained within "constructor.name" metatable key.
 *
 * For example, a `Map` class is has a name of "Map".
 *
 * Returns undefined if passed a non-table or if the provided table does not have a metatable.
 */
export declare function getTSTLClassName(object: unknown): string | undefined;
/**
 * Helper function to determine if a given object is a TypeScriptToLua `Map`.
 *
 * It is not reliable to use the `instanceof` operator to determine this because each Lua module has
 * their own copies of the entire lualib and thus their own instantiated version of a `Map`.
 */
export declare function isDefaultMap(object: unknown): object is DefaultMap<AnyNotNil, unknown>;
/** Helper function to check if a given table is a class table created by TypeScriptToLua. */
export declare function isTSTLClass(object: unknown): object is TSTLClass;
/**
 * Helper function to determine if a given object is a TypeScriptToLua `Map`.
 *
 * It is not reliable to use the `instanceof` operator to determine this because each Lua module
 * might have their own copy of the entire lualib and thus their own instantiated version of a
 * `Map`.
 */
export declare function isTSTLMap(object: unknown): object is Map<AnyNotNil, unknown>;
/**
 * Helper function to determine if a given object is a TypeScriptToLua `Set`.
 *
 * It is not reliable to use the `instanceof` operator to determine this because each Lua module
 * might have their own copy of the entire lualib and thus their own instantiated version of a
 * `Set`.
 */
export declare function isTSTLSet(object: unknown): object is Set<AnyNotNil>;
/**
 * Initializes a new TypeScriptToLua class in the situation where you do not know what kind of class
 * it is. This function requires that you provide an instantiated class of the same type, as it will
 * use the class constructor that is present on the other object's metatable to initialize the new
 * class.
 */
export declare function newTSTLClass(oldClass: TSTLClass): TSTLClass;
//# sourceMappingURL=tstlClass.d.ts.map