AngelScript requires the application developer to register the interface that the scripts should use to interact with anything outside the script itself.
It's possible to register global functions and global properties that can be used directly by the scripts.
For more complex scripts it may be useful to register new object types to complement the built-in data types.
AngelScript doesn't have a built-in string type as there is no de-facto standard for string types in C++. Instead AngelScript permits the application to register its own preferred string type, and a string factory that the script engine will use to instanciate the strings.
There is also no default built-in array type as this too is something that most developers may want to have their own version of. The array type is registered as a template, which is then set as the default array type. A standard array add-on is provided for those that do not want to implement their own array type.
Class interfaces can be registered if you want to guarantee that script classes implement a specific set of class methods. Interfaces can be easier to use when working with script classes from the application, but they are not necessary as the application can easily enumerate available methods and properties even without the interfaces.
Function definitions can be registered when you wish to allow the script to pass function pointers to the application, e.g. to implement callback routines.
Enumeration types and typedefs can also be registered to improve readability of the scripts.