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.