//a smart property
{{^vendorExtensions.x-isinherited}}
{{#supportsClassValidator}}
{{#vendorExtensions.x-inputModel}} 
{{#pattern}}
    @Matches({{{pattern}}})
{{/pattern}}
{{#vendorExtensions.x-string-length}}
    @Length({{minLength}}, {{maxLength}})
{{/vendorExtensions.x-string-length}}
{{^vendorExtensions.x-string-length}}
{{#minLength}}
    @MinLength({{minLength}})
{{/minLength}}
{{#maxLength}}
    @MaxLength({{maxLength}})
{{/maxLength}}
{{/vendorExtensions.x-string-length}}
{{#allowableValues}}
{{#min}}
    @Min({{min}})
{{/min}}
{{#max}}
    @Max({{max}})
{{/max}}
{{/allowableValues}}
{{/vendorExtensions.x-inputModel}} 
{{/supportsClassValidator}}
{{#isReadOnly}} readonly {{/isReadOnly}} '{{name}}'
{{#model.vendorExtensions.x-inputModel}}
{{^required}}
    ?
{{/required}}
{{/model.vendorExtensions.x-inputModel}}
{{^model.vendorExtensions.x-inputModel}}
{{#vendorExtensions.x-isnullable}}
?
{{/vendorExtensions.x-isnullable}}
{{/model.vendorExtensions.x-inputModel}}
: 
{{#vendorExtensions.x-isnullable}}
null |
{{/vendorExtensions.x-isnullable}}
{{#vendorExtensions.x-enumTypeName}}
{{#isContainer}}
    Array<{{{vendorExtensions.x-enumTypeName}}}>; //is enum container
{{/isContainer}}
{{^isContainer}}
    {{{vendorExtensions.x-enumTypeName}}}; //is single enum
{{/isContainer}}
{{/vendorExtensions.x-enumTypeName}}
{{^vendorExtensions.x-enumTypeName}}
    {{{datatype}}}; // not enum
{{/vendorExtensions.x-enumTypeName}}
{{/vendorExtensions.x-isinherited}}