Unfortunately, type of the type parameter doesn't resolve to a new type parameter. Anyway, type parameters are limited, you can't access variables or methods if a parameter type is not constrained. So I would say, type parameters are necessary evil.
Since you are clearly constraining M to a Model, you might change code as follows:
class Collection<T> {
public var model:Model<T>;
public function new(m:Model<T>) { model = m; }
public function toJSON():Array<T> { return new Array<T>(); }
}
and then use it like this: