import type { DomainJson } from "./DomainJson.js";
import type { TemplateJson } from "./TemplateJson.js";
/**
 * Types contain information about the combinations of attributes allowed for
 * features in the dataset. Each feature in the dataset can have a type,
 * indicated in its typeIdField, which is used in LayerDefinition.
 *
 * See {@link https://developers.arcgis.com/web-map-specification/objects/type/}
 * {@link https://developers.arcgis.com/web-scene-specification/objects/type/}.
 */
export interface TypeJson {
    /**
     * A set of domain objects for each domain in the type.
     */
    domains?: Record<string, DomainJson> | null;
    /**
     * A unique numerical ID for the type.
     */
    id?: number | string | null;
    /**
     * A string containing a user-friendly name for the type. This might be
     * shown on a menu of feature types that editors can create in the
     * collection.
     */
    name?: string | null;
    /**
     * An array of template objects describing features that can be created in
     * this layer. Templates are used with map notes, other feature collections,
     * and editable web-based CSV layers. They are not used with ArcGIS feature
     * services, which already have feature templates defined in the service.
     *
     * Templates are defined as a property of the layer definition when there
     * are no types defined; otherwise, templates are defined as properties of
     * the types.
     *
     * You might have more than one template per type if the attributes of
     * available features vary slightly. For example, you might have a type
     * named Copper pipe containing two templates: one whose DIAMETER property
     * is 12 and another whose DIAMETER property is 10.
     */
    templates?: TemplateJson[] | null;
}
