# Types
Herodot employs a generic, and recursive, type parser. It understands the type of all parameters in your API and can infer metadata from them.
TL;DR: Herodot understands types exactly the way you're used to writing them. Whenever a type is required (such as with parameters or responses), you can use primitives, generics, models or unions.
# Primitive types
Herodot has support for the following primitive types, which largely resembles PHP's primitives:
- boolean
- float
- integer
- null
- string
- array
Additionally, there's the special any
type, which can be used in all places where a type isn't known or cannot be expressed as a union type.
# Union types
Herodot supports union types, that is, types composed out of one or more types. You can declare a union by joining two or more types with a pipe (|
):
string|integer
# Template types
Template types, or generics, are a kind of container for other types: Say, an array of numbers. It could be typed as array
, but that would omit the additional
information about the array content. Therefore, Herodot allows you to add that information to the type:
array<integer>
As that is pretty verbose, you can also write simple array types like the following:
integer[]
Template types also support union types:
array<integer|float>
Herodot parses those types recursively, meaning you may nest the type syntax as much as you like:
array<string|array<float>|integer[]>
# Model types
Herodot also supports model types, so you may use your model (or API resource) classes as types when annotating API responses, for example.