Skip to main content

Overview

@overload defines multiple type signatures for a single function. GLuaLS uses overloads to type-check calls and infer return types from the matching overload.

Syntax

---@overload fun(params): ReturnType

Basic overloads

---@overload fun(x: number): number
---@overload fun(x: number, y: number): number
---@overload fun(x: number, y: number, z: number): number
function add(x, y, z)
    return x + (y or 0) + (z or 0)
end

Overloads with different return types

---@overload fun(value: string): string
---@overload fun(value: number): string
---@overload fun(value: boolean): string
---@param value any
---@return string
function toString(value)
    return tostring(value)
end

Optional parameters via overloads

Use overloads instead of optional ? parameters when parameter combinations have different types:
---@overload fun(name: string): Player | nil
---@overload fun(index: number): Player | nil
---@overload fun(): Player[]
function getPlayers(query)
    if type(query) == "string" then
        return player.GetByName(query)
    elseif type(query) == "number" then
        return Entity(query)
    else
        return player.GetAll()
    end
end

Method overloads

Use fun(self: ClassName, ...) to add overloads to methods:
---@overload fun(self: Player, target: Player): boolean
---@overload fun(self: Player, steamId: string): boolean
function Player:IsFriendsWith(target) end

Tips

  • The primary @param/@return annotations define the general signature
  • @overload adds specific, narrower signatures
  • GLuaLS checks overloads in order, so put more specific overloads first