首頁 > 後端開發 > Golang > 主體

如何將 TypeScript 介面轉換為 Go 結構體?

WBOY
發布: 2024-02-09 10:36:27
轉載
1134 人瀏覽過

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

php小編新一為您介紹如何將 TypeScript 介面轉換為 Go 結構體。當我們在前端使用 TypeScript 開發時,經常會定義介面來描述資料結構。而在後端使用 Go 語言開發時,需要將這些介面轉換為對應的結構體。本文將從基本型別、巢狀類型、選用型別等方面詳細說明如何進行轉換。透過本文的指導,您將能夠輕鬆地將 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 中複製它......

解決方法

#[key string]: 部分意味著它是一個鍵類型為string 的字典。在 go 中,這將是 map[string]<some 類型 >

type schematype map[string]schematypeentry

type schematypeentry struct {
  type      string
  required  bool
  // ...
}
登入後複製

或者,刪除 schematype 類型並更改 schema

type Schema struct {
    schema map[string]SchemaTypeEntry
}
登入後複製

現在,關於其他字段,您定義它們時看起來很奇怪,並且很可能不會按照您在此處顯示的方式工作。

default 將會是一個值,而不是 func() (不傳回任何內容的函數)。您不知道該值是什麼類型,因此該類型應該是 interface {}any (自 go 1.18 起 - interface {} 的別名)。

transform - 這可能是接受值、轉換它並傳回值的函式 - func(interface{}) 介面{}

不知道minlengthmaxlengthvalidate 在這種情況下代表什麼- 不清楚為什麼它們在javascript 中是數組,以及如何確定它們在go 中的長度恰好為2。

以上是如何將 TypeScript 介面轉換為 Go 結構體?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:stackoverflow.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!