code: private TSTypeSyntax createTypeSyntax(ClassTemplateSpec template) {
      if (template instanceof RecordTemplateSpec) {
        return new TSRecordSyntax((RecordTemplateSpec) template);
      } else if (template instanceof TyperefTemplateSpec) {
        return TSTyperefSyntaxCreate((TyperefTemplateSpec) template);
      } else if (template instanceof FixedTemplateSpec) {
        return TSFixedSyntaxCreate((FixedTemplateSpec) template);
      } else if (template instanceof EnumTemplateSpec) {
        return new TSEnumSyntax((EnumTemplateSpec) template);
      } else if (template instanceof PrimitiveTemplateSpec) {
        return new TSPrimitiveTypeSyntax((PrimitiveTemplateSpec) template);
      } else if (template instanceof MapTemplateSpec) {
        return new TSMapSyntax((MapTemplateSpec) template);
      } else if (template instanceof ArrayTemplateSpec) {
        return new TSArraySyntax((ArrayTemplateSpec) template);
      } else if (template instanceof UnionTemplateSpec) {
        return new TSUnionSyntax((UnionTemplateSpec) template);
      } else {
        throw new RuntimeException("Unrecognized template spec: " + template + " with schema " + template.getSchema());
      }
    }
docs: Create a TS*Syntax class around the provided ClassTemplate.
  
  That class will perform the heavy lifting of rendering TS-specific strings into the template.
  
  @param template the ClassTemplate
  @return a TS*Syntax class (see {@link TSSyntax} class-level docs for more info)