diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractTypeScriptClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractTypeScriptClientCodegen.java
index 2755301b909..3023e83afcf 100644
--- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractTypeScriptClientCodegen.java
+++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractTypeScriptClientCodegen.java
@@ -29,6 +29,8 @@ import org.slf4j.LoggerFactory;
import java.io.File;
import java.util.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
public abstract class AbstractTypeScriptClientCodegen extends DefaultCodegen implements CodegenConfig {
@@ -156,12 +158,6 @@ public abstract class AbstractTypeScriptClientCodegen extends DefaultCodegen imp
@Override
public String toParamName(String name) {
- // should be the same as variable name
- return toVarName(name);
- }
-
- @Override
- public String toVarName(String name) {
// sanitize name
name = sanitizeName(name, "\\W-[\\$]");
@@ -184,6 +180,33 @@ public abstract class AbstractTypeScriptClientCodegen extends DefaultCodegen imp
return name;
}
+ @Override
+ public String toVarName(String name) {
+ name = this.toParamName(name);
+
+ // if the proprty name has any breaking characters such as :, ;, . etc.
+ // then wrap the name within single quotes.
+ // my:interface:property: string; => 'my:interface:property': string;
+ if (propertyHasBreakingCharacters(name)) {
+ name = "\'" + name + "\'";
+ }
+
+ return name;
+ }
+
+ /**
+ * Checks whether property names have breaking characters like ':', '-'.
+ * @param str string to check for breaking characters
+ * @return true
if breaking characters are present and false
if not
+ */
+ private boolean propertyHasBreakingCharacters(String str) {
+ final String regex = "^.*[+*:;,.()-]+.*$";
+ final Pattern pattern = Pattern.compile(regex);
+ final Matcher matcher = pattern.matcher(str);
+ boolean matches = matcher.matches();
+ return matches;
+ }
+
@Override
public String toModelName(String name) {
name = sanitizeName(name); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'.
diff --git a/modules/openapi-generator/src/main/resources/typescript-angular/modelGeneric.mustache b/modules/openapi-generator/src/main/resources/typescript-angular/modelGeneric.mustache
index c9da208072e..9ec6e67dde9 100644
--- a/modules/openapi-generator/src/main/resources/typescript-angular/modelGeneric.mustache
+++ b/modules/openapi-generator/src/main/resources/typescript-angular/modelGeneric.mustache
@@ -5,6 +5,6 @@ export interface {{classname}} {{#parent}}extends {{{parent}}} {{/parent}}{ {{>m
* {{{description}}}
*/
{{/description}}
- {{#isReadOnly}}readonly {{/isReadOnly}}{{name}}{{^required}}?{{/required}}: {{#isEnum}}{{{datatypeWithEnum}}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}};
+ {{#isReadOnly}}readonly {{/isReadOnly}}{{{name}}}{{^required}}?{{/required}}: {{#isEnum}}{{{datatypeWithEnum}}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}};
{{/vars}}
}{{>modelGenericEnums}}
\ No newline at end of file