diff --git a/typescriptify/typescriptify.go b/typescriptify/typescriptify.go index 525ee46..183eb9a 100644 --- a/typescriptify/typescriptify.go +++ b/typescriptify/typescriptify.go @@ -272,12 +272,13 @@ func (t *typeScriptClassBuilder) AddMapField(fieldName string, field reflect.Str } strippedFieldName := strings.ReplaceAll(fieldName, "?", "") - keyTypeStr := keyType.Name() - // Key should always be string, no need for this: - // _, isSimple := t.types[keyType.Kind()] - // if !isSimple { - // keyTypeStr = t.prefix + keyType.Name() + t.suffix - // } + var keyTypeStr string + mappedType, isSimple := t.types[keyType.Kind()] + if !isSimple { + keyTypeStr = t.prefix + keyType.Name() + t.suffix + } else { + keyTypeStr = t.prefix + mappedType + t.suffix + } if valueType.Kind() == reflect.Struct { t.fields = append(t.fields, fmt.Sprintf("%s%s: {[key: %s]: %s};", t.indent, fieldName, keyTypeStr, t.prefix+valueTypeName)) diff --git a/typescriptify/typescriptify_test.go b/typescriptify/typescriptify_test.go index bde6225..013bde9 100644 --- a/typescriptify/typescriptify_test.go +++ b/typescriptify/typescriptify_test.go @@ -1076,3 +1076,27 @@ func TestTypescriptifyCustomJsonTag(t *testing.T) { }` testConverter(t, converter, false, desiredResult, nil) } + +func TestTypescriptifyCustomTypeInMap(t *testing.T) { + converter := New() + converter.CreateConstructor = false + + type Foo uint + converter.ManageType(reflect.TypeOf(Foo(0)), TypeOptions{TSType: "number"}) + + type Bar struct { + Foo Foo `json:"foo"` + FooInKey map[Foo]bool `json:"fooInKey"` + FooInValue map[string]Foo `json:"fooInValue"` + } + + converter.AddType(reflect.TypeOf(Bar{})) + + desiredResult := `export class Bar { + foo: number; + fooInKey: {[key: number]: boolean}; + fooInValue: {[key: string]: number}; +}` + + testConverter(t, converter, false, desiredResult, nil) +}