export type LuaType = LuaLiteralType | LuaNamedType | LuaArrayType | LuaUnionType | LuaTupleType | LuaDictionaryType | LuaTableType | LuaFunctionType; type LuaTypeByKind = Extract; export type LuaTypeKind = Pick["kind"]; interface BaseLuaType { readonly kind: LuaTypeKind; readonly optional?: boolean; } /** * A literal number, string, boolean or nil. */ export interface LuaLiteralType extends BaseLuaType { readonly kind: "literal"; readonly value: string; } /** * Any named class, table, enum etc, with or without generics. Includes basics * such as `table`, `string` etc. */ export interface LuaNamedType extends BaseLuaType { readonly kind: "named"; readonly name: readonly string[]; readonly generics: LuaType[]; } /** * Union of multiple types. */ export interface LuaUnionType extends BaseLuaType { readonly kind: "union"; readonly types: readonly LuaType[]; readonly parens?: boolean; } /** * Array type. */ export interface LuaArrayType extends BaseLuaType { readonly kind: "array"; readonly arrayType: LuaType; } /** * Tuple type. */ export interface LuaTupleType extends BaseLuaType { readonly kind: "tuple"; readonly types: readonly LuaType[]; } /** * Table with a specific key and value type. */ export interface LuaDictionaryType extends BaseLuaType { readonly kind: "dictionary"; readonly keyType: LuaType; readonly valueType: LuaType; } /** * Table with named and typed keys. */ export interface LuaTableType extends BaseLuaType { readonly kind: "table"; readonly fields: readonly [string, LuaType][]; } /** * Function type. */ export interface LuaFunctionType extends BaseLuaType { readonly kind: "function"; readonly parameters: readonly [string, LuaType][]; readonly returnType: LuaType | null; } export declare function formatType(luaType: LuaType): string; export declare function unionTypes(type: LuaType, ...types: LuaType[]): LuaType; export declare function createType(kind: TKind, fields: Omit, "kind">): LuaTypeByKind; export {};