Skip to content

Design pillar: TypeScript strictness — no any, generic track(), strict option types #5

@productdevbook

Description

@productdevbook

TypeScript gaps are the #2 complaint class in every wrapper. We ship strict types day one.

Evidence

Contract

  1. `strict: true`, `noImplicitAny`, `verbatimModuleSyntax`, `isolatedModules`, `noUncheckedIndexedAccess` all on.
  2. `track<T extends Record<string, JsonValue>>(event: string, metadata?: T)` — generic metadata.
  3. Per-provider `LoadOptions` extends base with discriminated union — required fields (`appId`, `websiteToken`, `key`, `portalId`, `propertyId`) are required at the type level.
  4. `declare global` extensions only inside provider files, never polluting global consumers — use ambient `ahize/globals` optional import for users who want `window.Intercom` typed.
  5. No `any`, no `Function`, no `{}`. Callback payloads defined as typed unions per provider.
  6. Publish with `provenance` + `attw` checks in release pipeline to guarantee types don't regress under modern resolution modes.

Metadata

Metadata

Assignees

No one assigned

    Labels

    competitor-analysisDerived from OSS competitor issue patternsdesign-pillarCore design decisionstypescriptType safety, .d.ts, generics

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions