diff --git a/src/converter/plugins/StringUnionTypePlugin.ts b/src/converter/plugins/StringUnionTypePlugin.ts index 186e648..ce33176 100644 --- a/src/converter/plugins/StringUnionTypePlugin.ts +++ b/src/converter/plugins/StringUnionTypePlugin.ts @@ -69,9 +69,10 @@ export function convertStringUnionType( checkCoverageService?.cover(literal) const value = literal.text - const key = value === "" + const valueAsIdentifier = identifier(value) + const key = (value === "") || (valueAsIdentifier === "") ? "`_`" - : identifier(value) + : valueAsIdentifier return [key, value] as const }) diff --git a/test/functional/base/generated/union/stringEnum.kt b/test/functional/base/generated/union/stringEnum.kt index 9d082fe..ff3024c 100644 --- a/test/functional/base/generated/union/stringEnum.kt +++ b/test/functional/base/generated/union/stringEnum.kt @@ -17,6 +17,21 @@ val multipartFormData: FormEncType } external fun switcher(): SwitcherResult + +sealed external interface Operator { +companion object { +@seskar.js.JsValue("") +val `_`: Operator +/* +Duplicated names were generated: +`_` for "=" +`_` for "<" +`_` for ">" +`_` for "<=" +`_` for ">=" +*/ +} +} sealed external interface SwitcherResult { companion object { @seskar.js.JsValue("on") diff --git a/test/functional/base/lib/union/stringEnum.d.ts b/test/functional/base/lib/union/stringEnum.d.ts index fd8a226..daa8af0 100644 --- a/test/functional/base/lib/union/stringEnum.d.ts +++ b/test/functional/base/lib/union/stringEnum.d.ts @@ -1,3 +1,5 @@ export declare type FormEncType = "application/x-www-form-urlencoded" | "multipart/form-data"; export declare function switcher(): "on" | "off" + +export declare type Operator = "" | "=" | "<" | ">" | "<=" | ">=";