Primitive types
boolean
True or False
integer
Arbitrary sized integer (there is no underflow or overflow).
string
UTF8 encoded binaries
The use case for strings is extremely narrow in Aiken and on-chain code, they are only used for tracing, a bit like labels attached to specific execution paths of your program. Most of the time, you probably want to use a ByteArray instead and only resort to String for debugging.
byte arrays
data
void
These are built in the language and can be typed as literals
Base building blocks
list
tuple
For associating types together