diff --git a/src/idl_gen_ts.cpp b/src/idl_gen_ts.cpp index 8d02b8eb4..27cac7cce 100644 --- a/src/idl_gen_ts.cpp +++ b/src/idl_gen_ts.cpp @@ -1120,18 +1120,18 @@ class TsGenerator : public BaseGenerator { const auto enum_type = AddImport(imports, enum_def, enum_def).name; const auto union_enum_loop = [&](const std::string& accessor_str) { - ret += " switch(" + enum_type + "[type]) {\n"; - ret += " case 'NONE': return " + null_keyword_ + "; \n"; + ret += " switch(type) {\n"; for (auto it = enum_def.Vals().begin(); it != enum_def.Vals().end(); ++it) { const auto& ev = **it; + const auto case_label = enum_type + "." + namer_.Variant(ev); if (ev.IsZero()) { + ret += + " case " + case_label + ": return " + null_keyword_ + ";\n"; continue; } - - ret += " case '" + namer_.Variant(ev) + "': "; - + ret += " case " + case_label + ": "; if (IsString(ev.union_type)) { ret += "return " + accessor_str + "'') as string;"; } else if (ev.union_type.base_type == BASE_TYPE_STRUCT) { diff --git a/tests/ts/my-game/example/any-ambiguous-aliases.ts b/tests/ts/my-game/example/any-ambiguous-aliases.ts index 7510e3056..b50510df5 100644 --- a/tests/ts/my-game/example/any-ambiguous-aliases.ts +++ b/tests/ts/my-game/example/any-ambiguous-aliases.ts @@ -16,11 +16,11 @@ export function unionToAnyAmbiguousAliases( type: AnyAmbiguousAliases, accessor: (obj:Monster) => Monster|null ): Monster|null { - switch(AnyAmbiguousAliases[type]) { - case 'NONE': return null; - case 'M1': return accessor(new Monster())! as Monster; - case 'M2': return accessor(new Monster())! as Monster; - case 'M3': return accessor(new Monster())! as Monster; + switch(type) { + case AnyAmbiguousAliases.NONE: return null; + case AnyAmbiguousAliases.M1: return accessor(new Monster())! as Monster; + case AnyAmbiguousAliases.M2: return accessor(new Monster())! as Monster; + case AnyAmbiguousAliases.M3: return accessor(new Monster())! as Monster; default: return null; } } @@ -30,11 +30,11 @@ export function unionListToAnyAmbiguousAliases( accessor: (index: number, obj:Monster) => Monster|null, index: number ): Monster|null { - switch(AnyAmbiguousAliases[type]) { - case 'NONE': return null; - case 'M1': return accessor(index, new Monster())! as Monster; - case 'M2': return accessor(index, new Monster())! as Monster; - case 'M3': return accessor(index, new Monster())! as Monster; + switch(type) { + case AnyAmbiguousAliases.NONE: return null; + case AnyAmbiguousAliases.M1: return accessor(index, new Monster())! as Monster; + case AnyAmbiguousAliases.M2: return accessor(index, new Monster())! as Monster; + case AnyAmbiguousAliases.M3: return accessor(index, new Monster())! as Monster; default: return null; } } diff --git a/tests/ts/my-game/example/any-unique-aliases.ts b/tests/ts/my-game/example/any-unique-aliases.ts index c0b7e15c7..0186aadb0 100644 --- a/tests/ts/my-game/example/any-unique-aliases.ts +++ b/tests/ts/my-game/example/any-unique-aliases.ts @@ -18,11 +18,11 @@ export function unionToAnyUniqueAliases( type: AnyUniqueAliases, accessor: (obj:Monster|MyGame_Example2_Monster|TestSimpleTableWithEnum) => Monster|MyGame_Example2_Monster|TestSimpleTableWithEnum|null ): Monster|MyGame_Example2_Monster|TestSimpleTableWithEnum|null { - switch(AnyUniqueAliases[type]) { - case 'NONE': return null; - case 'M': return accessor(new Monster())! as Monster; - case 'TS': return accessor(new TestSimpleTableWithEnum())! as TestSimpleTableWithEnum; - case 'M2': return accessor(new MyGame_Example2_Monster())! as MyGame_Example2_Monster; + switch(type) { + case AnyUniqueAliases.NONE: return null; + case AnyUniqueAliases.M: return accessor(new Monster())! as Monster; + case AnyUniqueAliases.TS: return accessor(new TestSimpleTableWithEnum())! as TestSimpleTableWithEnum; + case AnyUniqueAliases.M2: return accessor(new MyGame_Example2_Monster())! as MyGame_Example2_Monster; default: return null; } } @@ -32,11 +32,11 @@ export function unionListToAnyUniqueAliases( accessor: (index: number, obj:Monster|MyGame_Example2_Monster|TestSimpleTableWithEnum) => Monster|MyGame_Example2_Monster|TestSimpleTableWithEnum|null, index: number ): Monster|MyGame_Example2_Monster|TestSimpleTableWithEnum|null { - switch(AnyUniqueAliases[type]) { - case 'NONE': return null; - case 'M': return accessor(index, new Monster())! as Monster; - case 'TS': return accessor(index, new TestSimpleTableWithEnum())! as TestSimpleTableWithEnum; - case 'M2': return accessor(index, new MyGame_Example2_Monster())! as MyGame_Example2_Monster; + switch(type) { + case AnyUniqueAliases.NONE: return null; + case AnyUniqueAliases.M: return accessor(index, new Monster())! as Monster; + case AnyUniqueAliases.TS: return accessor(index, new TestSimpleTableWithEnum())! as TestSimpleTableWithEnum; + case AnyUniqueAliases.M2: return accessor(index, new MyGame_Example2_Monster())! as MyGame_Example2_Monster; default: return null; } } diff --git a/tests/ts/my-game/example/any.ts b/tests/ts/my-game/example/any.ts index ea886c787..ffc88eced 100644 --- a/tests/ts/my-game/example/any.ts +++ b/tests/ts/my-game/example/any.ts @@ -18,11 +18,11 @@ export function unionToAny( type: Any, accessor: (obj:Monster|MyGame_Example2_Monster|TestSimpleTableWithEnum) => Monster|MyGame_Example2_Monster|TestSimpleTableWithEnum|null ): Monster|MyGame_Example2_Monster|TestSimpleTableWithEnum|null { - switch(Any[type]) { - case 'NONE': return null; - case 'Monster': return accessor(new Monster())! as Monster; - case 'TestSimpleTableWithEnum': return accessor(new TestSimpleTableWithEnum())! as TestSimpleTableWithEnum; - case 'MyGame_Example2_Monster': return accessor(new MyGame_Example2_Monster())! as MyGame_Example2_Monster; + switch(type) { + case Any.NONE: return null; + case Any.Monster: return accessor(new Monster())! as Monster; + case Any.TestSimpleTableWithEnum: return accessor(new TestSimpleTableWithEnum())! as TestSimpleTableWithEnum; + case Any.MyGame_Example2_Monster: return accessor(new MyGame_Example2_Monster())! as MyGame_Example2_Monster; default: return null; } } @@ -32,11 +32,11 @@ export function unionListToAny( accessor: (index: number, obj:Monster|MyGame_Example2_Monster|TestSimpleTableWithEnum) => Monster|MyGame_Example2_Monster|TestSimpleTableWithEnum|null, index: number ): Monster|MyGame_Example2_Monster|TestSimpleTableWithEnum|null { - switch(Any[type]) { - case 'NONE': return null; - case 'Monster': return accessor(index, new Monster())! as Monster; - case 'TestSimpleTableWithEnum': return accessor(index, new TestSimpleTableWithEnum())! as TestSimpleTableWithEnum; - case 'MyGame_Example2_Monster': return accessor(index, new MyGame_Example2_Monster())! as MyGame_Example2_Monster; + switch(type) { + case Any.NONE: return null; + case Any.Monster: return accessor(index, new Monster())! as Monster; + case Any.TestSimpleTableWithEnum: return accessor(index, new TestSimpleTableWithEnum())! as TestSimpleTableWithEnum; + case Any.MyGame_Example2_Monster: return accessor(index, new MyGame_Example2_Monster())! as MyGame_Example2_Monster; default: return null; } } diff --git a/tests/ts/union_vector/character.ts b/tests/ts/union_vector/character.ts index 6bb0ffd00..489505888 100644 --- a/tests/ts/union_vector/character.ts +++ b/tests/ts/union_vector/character.ts @@ -21,14 +21,14 @@ export function unionToCharacter( type: Character, accessor: (obj:Attacker|BookReader|Rapunzel|string) => Attacker|BookReader|Rapunzel|string|null ): Attacker|BookReader|Rapunzel|string|null { - switch(Character[type]) { - case 'NONE': return null; - case 'MuLan': return accessor(new Attacker())! as Attacker; - case 'Rapunzel': return accessor(new Rapunzel())! as Rapunzel; - case 'Belle': return accessor(new BookReader())! as BookReader; - case 'BookFan': return accessor(new BookReader())! as BookReader; - case 'Other': return accessor('') as string; - case 'Unused': return accessor('') as string; + switch(type) { + case Character.NONE: return null; + case Character.MuLan: return accessor(new Attacker())! as Attacker; + case Character.Rapunzel: return accessor(new Rapunzel())! as Rapunzel; + case Character.Belle: return accessor(new BookReader())! as BookReader; + case Character.BookFan: return accessor(new BookReader())! as BookReader; + case Character.Other: return accessor('') as string; + case Character.Unused: return accessor('') as string; default: return null; } } @@ -38,14 +38,14 @@ export function unionListToCharacter( accessor: (index: number, obj:Attacker|BookReader|Rapunzel|string) => Attacker|BookReader|Rapunzel|string|null, index: number ): Attacker|BookReader|Rapunzel|string|null { - switch(Character[type]) { - case 'NONE': return null; - case 'MuLan': return accessor(index, new Attacker())! as Attacker; - case 'Rapunzel': return accessor(index, new Rapunzel())! as Rapunzel; - case 'Belle': return accessor(index, new BookReader())! as BookReader; - case 'BookFan': return accessor(index, new BookReader())! as BookReader; - case 'Other': return accessor(index, '') as string; - case 'Unused': return accessor(index, '') as string; + switch(type) { + case Character.NONE: return null; + case Character.MuLan: return accessor(index, new Attacker())! as Attacker; + case Character.Rapunzel: return accessor(index, new Rapunzel())! as Rapunzel; + case Character.Belle: return accessor(index, new BookReader())! as BookReader; + case Character.BookFan: return accessor(index, new BookReader())! as BookReader; + case Character.Other: return accessor(index, '') as string; + case Character.Unused: return accessor(index, '') as string; default: return null; } } diff --git a/tests/ts/union_vector/gadget.ts b/tests/ts/union_vector/gadget.ts index bff970278..3e79572d9 100644 --- a/tests/ts/union_vector/gadget.ts +++ b/tests/ts/union_vector/gadget.ts @@ -16,10 +16,10 @@ export function unionToGadget( type: Gadget, accessor: (obj:FallingTub|HandFan) => FallingTub|HandFan|null ): FallingTub|HandFan|null { - switch(Gadget[type]) { - case 'NONE': return null; - case 'FallingTub': return accessor(new FallingTub())! as FallingTub; - case 'HandFan': return accessor(new HandFan())! as HandFan; + switch(type) { + case Gadget.NONE: return null; + case Gadget.FallingTub: return accessor(new FallingTub())! as FallingTub; + case Gadget.HandFan: return accessor(new HandFan())! as HandFan; default: return null; } } @@ -29,10 +29,10 @@ export function unionListToGadget( accessor: (index: number, obj:FallingTub|HandFan) => FallingTub|HandFan|null, index: number ): FallingTub|HandFan|null { - switch(Gadget[type]) { - case 'NONE': return null; - case 'FallingTub': return accessor(index, new FallingTub())! as FallingTub; - case 'HandFan': return accessor(index, new HandFan())! as HandFan; + switch(type) { + case Gadget.NONE: return null; + case Gadget.FallingTub: return accessor(index, new FallingTub())! as FallingTub; + case Gadget.HandFan: return accessor(index, new HandFan())! as HandFan; default: return null; } }