/**
 * A recursive implementation of the Partial<T> type.
 * Source: https://stackoverflow.com/a/49936686/772859
 */ export type DeepPartial < T > = { [ P in keyof T ] ? : null | ( T [ P ] extends Array < infer U > ? Array < DeepPartial < U > > : T [ P ] extends ReadonlyArray < infer U > ? ReadonlyArray < DeepPartial < U > > : DeepPartial < T [ P ] > ) ; } ; /**
 * A type representing the type rather than instance of a class.
 */ export type Type < T > = new ( ... args ) => T ; /**
 * A type describing the shape of a paginated list response
 */ export interface PaginatedList < T > { items : T [ ] ; totalItems : number ; } description An entity ID. Depending on the configured  EntityIdStrategy , it will be either
 * a `string` or a `number`;
 *
 *  docsCategory docsWeight export type ID = string | number ; description docsCategory export type CustomFieldType = 'string' | 'localeString' | 'int' | 'float' | 'boolean' | 'datetime' ; description Configures a custom field on an entity in the  CustomFields config object.
 *
 *  docsCategory export interface CustomFieldConfig { name : string ; type : CustomFieldType ; } description Most entities can have additional fields added to them by defining an array of  CustomFieldConfig * objects on against the corresponding key.
 *
 *  example docsCategory export interface CustomFields { Address ? : CustomFieldConfig [ ] ; Collection ? : CustomFieldConfig [ ] ; Customer ? : CustomFieldConfig [ ] ; Facet ? : CustomFieldConfig [ ] ; FacetValue ? : CustomFieldConfig [ ] ; GlobalSettings ? : CustomFieldConfig [ ] ; Product ? : CustomFieldConfig [ ] ; ProductOption ? : CustomFieldConfig [ ] ; ProductOptionGroup ? : CustomFieldConfig [ ] ; ProductVariant ? : CustomFieldConfig [ ] ; User ? : CustomFieldConfig [ ] ; } /**
 * This interface should be implemented by any entity which can be extended
 * with custom fields.
 */ export interface HasCustomFields { customFields : CustomFieldsObject ; } export type MayHaveCustomFields = Partial < HasCustomFields > ; export interface CustomFieldsObject { [ key ] : any ; } /**
 * This interface describes the shape of the JSON config file used by the Admin UI.
 */ export interface AdminUiConfig { apiHost : string | 'auto' ; apiPort : number | 'auto' ; adminApiPath : string ; }