> ## Documentation Index
> Fetch the complete documentation index at: https://gluals.arnux.net/llms.txt
> Use this file to discover all available pages before exploring further.

# @overload

> Define multiple signatures for a single function.

## 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

```lua theme={null}
---@overload fun(params): ReturnType
```

***

## Basic overloads

```lua theme={null}
---@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

```lua theme={null}
---@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:

```lua theme={null}
---@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:

```lua theme={null}
---@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
