为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕村9548890 2023-03-21 10:27:42
我正在尝试将使用 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 中复制它......
查看完整描述

1 回答

?
DIEA

TA贡献1820条经验 获得超2个赞

该[key string]:部分表示它是一个键为 type 的字典string。在 Go 中,这将是一个map[string]<some type>.


type SchemaType map[string]SchemaTypeEntry


type SchemaTypeEntry struct {

  Type      string

  Required  bool

  // ...

}

或者,删除SchemaType类型并更改Schema:


type Schema struct {

    schema map[string]SchemaTypeEntry

}

现在,关于其他字段,您定义它们时看起来很奇怪,而且它很可能不会像您在此处显示的那样工作。


Default将是一个值,而不是一个func()(不返回任何内容的函数)。你不知道值是什么类型,所以类型应该是interface {}or any(因为 Go 1.18 - 的别名interface {})。


Transform- 这可能是一个接受一个值、转换它并返回一个值的函数 -func(interface{}) interface{}


不知道MinLength,MaxLength和Validate在此上下文中代表什么——不清楚为什么它们在 Javascript 中是数组,以及如何确定它们在 Go 中的长度恰好为 2。


查看完整回答
反对 回复 2023-03-21
  • 1 回答
  • 0 关注
  • 157 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信