Firstly, to clear the common confusion here.
{a:String} is the type, not A.
A typedef is just an alias, you can imagine replacing every A in your code with {a:String} and the code is exactly equivalent, so it's not 'passing a typedef as parameter' or 'store a typedef in a variable', but in this specific case, passing/storing an anonymous type (the name of types like {a:String} and {x:Float} etc).
I don't believe this can be done because anonymous types/structures have no typed runtime representation in all current haxe targets, they're basicly equivalent to Dynamic at runtime. The same way that without @;generic meta, type parameters of types are erased at runtime. Eg: Array<Float> and Array<{x:String}> and Array<Float> are indistinguishable at runtime, they are all just 'Array'.