我正在尝试将使用 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。
- 1 回答
- 0 关注
- 157 浏览
添加回答
举报
0/150
提交
取消