infer property types where possible