TypeScript gaps are the #2 complaint class in every wrapper. We ship strict types day one.
Evidence
Contract
- `strict: true`, `noImplicitAny`, `verbatimModuleSyntax`, `isolatedModules`, `noUncheckedIndexedAccess` all on.
- `track<T extends Record<string, JsonValue>>(event: string, metadata?: T)` — generic metadata.
- Per-provider `LoadOptions` extends base with discriminated union — required fields (`appId`, `websiteToken`, `key`, `portalId`, `propertyId`) are required at the type level.
- `declare global` extensions only inside provider files, never polluting global consumers — use ambient `ahize/globals` optional import for users who want `window.Intercom` typed.
- No `any`, no `Function`, no `{}`. Callback payloads defined as typed unions per provider.
- Publish with `provenance` + `attw` checks in release pipeline to guarantee types don't regress under modern resolution modes.
TypeScript gaps are the #2 complaint class in every wrapper. We ship strict types day one.
Evidence
deferis invalid B3nnyL/react-zendesk#22` — "Failed prop type: defer is invalid" Failed prop type: Zendesk: prop typedeferis invalid B3nnyL/react-zendesk#22Contract