Advanced TypeScript for Harness Builders

9. Utility Types in Practice

Record, Pick, Omit, Partial, Extract — the built-in utility types used across pi-mono.

Record<K, V>

File: packages/ai/src/types.ts L61-63

export interface ProviderResponse {
  status: number;
  headers: Record<string, string>;
}

Pick<T, K>

File: packages/coding-agent/src/core/footer-data-provider.ts L336-339

export type ReadonlyFooterDataProvider = Pick<
  FooterDataProvider,
  "getGitBranch" | "getExtensionStatuses" | "getAvailableProviderCount" | "onBranchChange"
>;

Creates a narrow read-only facade from a larger class.

Omit<T, K>

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

registerCommand(name: string, options: Omit<RegisteredCommand, "name" | "sourceInfo">): void;

Partial<Record<...>>

File: packages/ai/src/types.ts L273

reasoningEffortMap?: Partial<Record<ThinkingLevel, string>>;

Extract<T, U>

File: packages/ai/src/types.ts L258

| { type: "done"; reason: Extract<StopReason, "stop" | "length" | "toolUse">; message: AssistantMessage }
| { type: "error"; reason: Extract<StopReason, "aborted" | "error">; error: AssistantMessage };

Restricts StopReason to only the relevant subset for each event variant.


Open this chapter inside the full course