// replace this
class ArrayType<T extends Type<V>, V> implements Type<V[]>
// with
class ArrayType<T extends Type<any>> implements Type<RuntimeType<T>[]>
// it makes our types easier to work with. this:
ArrayType<StringType> =
// instead of this:
ArrayType<StringType, string>