Advanced TypeScript for Harness Builders

11. Function Overloads

Multiple call signatures let one name accept different argument types and return corresponding types.

Multiple call signatures let a single function name accept different argument types and return corresponding types.

File: packages/coding-agent/src/core/extensions/types.ts L862-874

// Overload signatures for built-in tools
export function isToolCallEventType(toolName: "bash", event: ToolCallEvent): event is BashToolCallEvent;
export function isToolCallEventType(toolName: "read", event: ToolCallEvent): event is ReadToolCallEvent;
export function isToolCallEventType(toolName: "edit", event: ToolCallEvent): event is EditToolCallEvent;
// ... more overloads ...

// Generic overload for custom tools
export function isToolCallEventType<TName extends string, TInput extends Record<string, unknown>>(
  toolName: TName,
  event: ToolCallEvent
): event is ToolCallEvent & { toolName: TName; input: TInput };

// Implementation signature
export function isToolCallEventType(toolName: string, event: ToolCallEvent): boolean {
  return event.toolName === toolName;
}

Event subscription overloads (26 overloads on on()):

File: packages/coding-agent/src/core/extensions/types.ts L1011-1047

on(event: "session_start", handler: ExtensionHandler<SessionStartEvent>): void;
on(event: "agent_start", handler: ExtensionHandler<AgentStartEvent>): void;
on(event: "tool_call", handler: ExtensionHandler<ToolCallEvent, ToolCallEventResult>): void;
// ... each event name maps to its specific event & result type

Open this chapter inside the full course