refactors typedTemplate