Skip to content

Type Definitions

This guide provides an overview of the core TypeScript type definitions used in the Bagisto Headless storefront.

Overview

TypeScript is used throughout the project to provide type safety and improved developer experience. Most global type definitions are centralized in the src/types directory, with domain-specific subdirectories for better organization.

Primary File: src/types/types.ts

1. Core GraphQL Helpers

The storefront uses standard helpers to handle the structure of GraphQL responses, especially for paginated data.

typescript
export type Maybe<T> = T | null;

export type Connection<T> = {
  edges: Array<Edge<T>>;
};

export type Edge<T> = {
  node: T;
};

2. Product Models

Product types are comprehensive, covering everything from simple display data to complex configurable variants.

  • BagistoProductInfo: The primary type for product data returned from the API, including names, descriptions, and media.
  • ProductVariant: Defines the structure of a product variant, including its unique SKU, availability, and specific options (e.g., Size, Color).
  • ProductPrice: Handles complex pricing structures, including regular, final, and formatted prices with currency codes.

3. Cart & Checkout Models

These types define the structure of the active shopping session and the data required for order placement.

  • Cart / BagistoCart: Represents the overall shopping cart, including item counts, totals, and session identifiers.
  • CartItem: Details for an individual item in the cart, linked to its parent product and selected options.
  • AddressDataTypes: A unified type for both billing and shipping addresses, used across forms and API mutations.
  • BagistoPaymentDataType: Encapsulates the cart total and the selected payment method details.

4. Customer & User Models

Used for authentication and profile management.

  • BagistoUser: The core profile type containing the user's name, email, phone, and account status.
  • BagistoUserTypes: Helper types for handling user registration and login mutation responses.

5. Theme & Layout Models

  • ThemeCustomizationTypes: Defines the structure for theme-driven content like banners, carousels, and footer menus.
  • IconSvgProps: A standard interface for SVG icon components, extending the native SVGProps with an optional size parameter.

6. Directory Structure

For larger domains, types are further subdivided:

bash
src/types/
├── cart/           # Cart-specific interfaces
├── category/       # Category and hierarchy types
├── checkout/       # Checkout flow and payment types
├── theme/          # UI Kit and primitive types
└── types.ts        # Global e-commerce models

Best Practices

  1. Explicit Typing: Avoid using any whenever possible. Leverage the existing interfaces to ensure complete coverage.
  2. Domain Grouping: If a type is only used within a specific feature (e.g., Checkout), consider placing it in a feature-relative type.ts or within src/types/checkout/.
  3. API Alignment: Most types in types.ts are designed to match the expected structure of the Bagisto GraphQL API, making it easier to map mutation responses directly to the application state.

Next Steps

Released under the MIT License.