type library

Defines the type model. The type model is part of the element model in that most types are defined by Dart code (the types dynamic and void being the notable exceptions). All types are represented by an instance of a subclass of DartType.

Other than dynamic and void, all of the types define either the interface defined by a class (an instance of InterfaceType) or the type of a function (an instance of FunctionType).

We make a distinction between the declaration of a class (a ClassElement) and the type defined by that class (an InterfaceType). The biggest reason for the distinction is to allow us to more cleanly represent the distinction between type parameters and type arguments. For example, if we define a class as class Pair<K, V> {}, the declarations of K and V represent type parameters. But if we declare a variable as Pair<String, int> pair; the references to String and int are type arguments.


The type associated with elements in the element model. [...]
The type of a function, method, constructor, getter, or setter. Function types come in three variations: [...]
The type introduced by either a class or an interface, or a reference to such a type. [...]
A type that can track substituted type parameters, either for itself after instantiation, or from a surrounding context. [...]
The type introduced by a type parameter. [...]