如何将 TypeScript 接口转换为 Go 结构?

我正在尝试将使用 TypeScript 构建的对象建模工具转换为 Go。


我在 TypeScript 中拥有的是:


interface SchemaType {

  [key: string]: {

    type: string;

    required?: boolean;

    default?: any;

    validate?: any[];

    maxlength?: any[];

    minlength?: any[],

    transform?: Function;

  };

};


class Schema {

  private readonly schema;


  constructor(schema: SchemaType) {

    this.schema = schema;

  };


  public validate(data: object): Promise<object> {

    // Do something with data

    return data;

  };

};

这样我就可以做:


const itemSchema = new Schema({

  id: {

    type: String,

    required: true

  },

  createdBy: {

    type: String,

    required: true

  }

});

我对 Go 的了解只有这么远:


type SchemaType struct {

  Key       string // I'm not sure about this bit

  Type      string

  Required  bool

  Default   func()

  Validate  [2]interface{}

  Maxlength [2]interface{}

  Minlength [2]interface{}

  Transform func()

}


type Schema struct {

    schema SchemaType

}


func (s *Schema) NewSchema(schema SchemaType) {

    s.schema = schema

}


func (s *Schema) Validate(collection string, data map[string]interface{}) map[string]interface{} {

    // do something with data

    return data

}

我有点卡住了,主要是因为 SchemaType 接口中的动态“键”,我不确定如何在 Go 中复制它......


慕村9548890
浏览 158回答 1
1回答

DIEA

该[key string]:部分表示它是一个键为 type 的字典string。在 Go 中,这将是一个map[string]<some type>.type SchemaType map[string]SchemaTypeEntrytype SchemaTypeEntry struct {&nbsp; Type&nbsp; &nbsp; &nbsp; string&nbsp; Required&nbsp; bool&nbsp; // ...}或者,删除SchemaType类型并更改Schema:type Schema struct {&nbsp; &nbsp; schema map[string]SchemaTypeEntry}现在,关于其他字段,您定义它们时看起来很奇怪,而且它很可能不会像您在此处显示的那样工作。Default将是一个值,而不是一个func()(不返回任何内容的函数)。你不知道值是什么类型,所以类型应该是interface {}or any(因为 Go 1.18 - 的别名interface {})。Transform- 这可能是一个接受一个值、转换它并返回一个值的函数 -func(interface{}) interface{}不知道MinLength,MaxLength和Validate在此上下文中代表什么——不清楚为什么它们在 Javascript 中是数组,以及如何确定它们在 Go 中的长度恰好为 2。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go