I know that this was asked 1 year ago, but for anyone who is late to the party, here it is.
I can't figure out how I missed this since it's right there in the docs, but as all of us here are in the same boat, let's see what's going on (starting from your code).
type Types = 'text' | 'date' | 'articles' | 'params';
type MyExperiment<Type extends Types> = { t : Type };
// We can drop the parentheses around "infer U" as they do nothing here
type MyExperimentsUnion = Types extends infer U ? MyExperiment<U> : never;
// Type 'U' does not satisfy the constraint 'Types'.
In your code, you only capture Types using the infer keyword, but that doesn't tell typescript anything about U, so even though you will see this:
type foo = Types extends infer U ? U : never;
// foo will show up as 'text' | 'date' | 'articles' | 'params'
And wonder "Well, isn't U then of type 'text' | 'date' | 'articles' | 'params'? Why is it not assignable to MyExperiment<>?". My guess* is that the union type is only resolved at the end of the conditional, so it is not technically available when you assign it as a type parameter to MyExperiment<>.
If you wanted to do this with infer and distribute the type, you would have to add an extra condition, to constrain U at that time, to ensure that it is available as the correct type when you use it as a type parameter in MyExperiment<>.
type MyExperimentsUnion =
Types extends infer U ?
U extends Types ?
MyExperiment<U>
: never
: never;
// MyExperiment<"text"> | MyExperiment<"date"> | MyExperiment<"articles"> | MyExperiment<"params">
Your example, however, could be also done like this
type MyExperimentsUnion<T extends Types = Types> = T extends any ? MyExperiment<T> : never;
// When you use MyExperimentsUnion with no type parameter, it will be
// MyExperiment<"text"> | MyExperiment<"date"> | MyExperiment<"articles"> | MyExperiment<"params">
* I am explicitly stating that it is my guess because I haven't really studied how TypeScript evaluates this.