diff --git a/v2/internal/binding/binding.go b/v2/internal/binding/binding.go index 1c5a2cb488a..d2b437f2b12 100644 --- a/v2/internal/binding/binding.go +++ b/v2/internal/binding/binding.go @@ -262,20 +262,17 @@ func (b *Bindings) AddStructToGenerateTS(packageName string, structName string, // Iterate this struct and add any struct field references structType := reflect.TypeOf(s) - if hasElements(structType) { + for hasElements(structType) { structType = structType.Elem() } for i := 0; i < structType.NumField(); i++ { field := structType.Field(i) - if field.Anonymous { + if field.Anonymous || !field.IsExported() { continue } kind := field.Type.Kind() if kind == reflect.Struct { - if !field.IsExported() { - continue - } fqname := field.Type.String() sNameSplit := strings.SplitN(fqname, ".", 2) if len(sNameSplit) < 2 { @@ -288,22 +285,24 @@ func (b *Bindings) AddStructToGenerateTS(packageName string, structName string, s := reflect.Indirect(a).Interface() b.AddStructToGenerateTS(pName, sName, s) } - } else if hasElements(field.Type) && field.Type.Elem().Kind() == reflect.Struct { - if !field.IsExported() { - continue - } - fqname := field.Type.Elem().String() - sNameSplit := strings.SplitN(fqname, ".", 2) - if len(sNameSplit) < 2 { - continue + } else { + fType := field.Type + for hasElements(fType) { + fType = fType.Elem() } - sName := sNameSplit[1] - pName := getPackageName(fqname) - typ := field.Type.Elem() - a := reflect.New(typ) - if b.hasExportedJSONFields(typ) { - s := reflect.Indirect(a).Interface() - b.AddStructToGenerateTS(pName, sName, s) + if fType.Kind() == reflect.Struct { + fqname := fType.String() + sNameSplit := strings.SplitN(fqname, ".", 2) + if len(sNameSplit) < 2 { + continue + } + sName := sNameSplit[1] + pName := getPackageName(fqname) + a := reflect.New(fType) + if b.hasExportedJSONFields(fType) { + s := reflect.Indirect(a).Interface() + b.AddStructToGenerateTS(pName, sName, s) + } } } } diff --git a/v2/internal/typescriptify/typescriptify.go b/v2/internal/typescriptify/typescriptify.go index 5ef61449caf..23542eb3ea1 100644 --- a/v2/internal/typescriptify/typescriptify.go +++ b/v2/internal/typescriptify/typescriptify.go @@ -835,7 +835,10 @@ type typeScriptClassBuilder struct { func (t *typeScriptClassBuilder) AddSimpleArrayField(fieldName string, field reflect.StructField, arrayDepth int, opts TypeOptions) error { fieldType := nameTypeOf(field.Type.Elem()) kind := field.Type.Elem().Kind() - typeScriptType := t.types[kind] + typeScriptType, ok := t.types[kind] + if !ok { + typeScriptType = "any" + } if len(fieldName) > 0 { strippedFieldName := strings.ReplaceAll(fieldName, "?", "") @@ -857,7 +860,11 @@ func (t *typeScriptClassBuilder) AddSimpleField(fieldName string, field reflect. fieldType := nameTypeOf(field.Type) kind := field.Type.Kind() - typeScriptType := t.types[kind] + typeScriptType, ok := t.types[kind] + if !ok { + typeScriptType = "any" + } + if len(opts.TSType) > 0 { typeScriptType = opts.TSType }