Lets say My modulescript references the value of a StringValue object which is a descendant of the Modulescript.
When you try the obvious:
local module = {} module.a = script.StringVal.Value return module
a returns nil
So how do I keep a ancestry reference? Or is this not possible?
Val is not a valid member of StringValue and that's what module.a is nil. Set module.a to script.StringValue.Value instead of Val and it will work as expected.