{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "https://amazonalexa.com/ask/2020/12/TypeDeclaration",
  "title": "TypeDeclaration",
  "description": "Represents a type declaration.",
  "type": "object",
  "additionalProperties": false,
  "required": ["kind", "name"],
  "properties": {
    "kind": {
      "const": "TypeDeclaration",
      "title": "kind",
      "description": "The expression's identifier."
    },
    "name": {
      "description": "The name of the type.",
      "$ref": "https://amazonalexa.com/ask/2020/12/QualifiedName",
      "examples": ["org.example.Manager", "com.amazon.alexa.schema.core.String"]
    },
    "extensions": {
      "type": "array",
      "description": "The set of types being extended.",
      "items": {
        "$ref": "https://amazonalexa.com/ask/2020/12/TypeReference"
      }
    },
    "genericArguments": {
      "$ref": "https://amazonalexa.com/ask/2020/12/GenericArgumentsDeclaration"
    },
    "properties": {
      "description": "The type's properties. Each item represents a property with a name and a type.",
      "type": "array",
      "additionalItems": false,
      "required": ["name", "type"],
      "items": {
        "type": "object",
        "required": ["name", "type"],
        "properties": {
          "name": {
            "description": "Name of the property.",
            "$ref": "https://amazonalexa.com/ask/2020/12/Name"
          },
          "type": {
            "description": "The reference to a type.",
            "$ref": "https://amazonalexa.com/ask/2020/12/TypeReference"
          },
          "optional": {
            "type": "boolean",
            "description": "Indicates whether the property is required in expressions of this type.",
            "default": false
          },
          "annotations": {
            "type": "array",
            "items": {
              "$ref": "https://amazonalexa.com/ask/2020/12/Call",
              "description": "call data structures to annotate this property."
            }
          }
        }
      }
    },
    "annotations": {
      "type": "array",
      "items": {
        "$ref": "https://amazonalexa.com/ask/2020/12/Call",
        "description": "call data structures to annotate this type declaration."
      }
    }
  }
}
