1

TL;DR
如何创建一个包含嵌套对象的模型,而不为每个对象类型的属性创建一个新模型?

LB4 和 Typescript 的新手,如果这是一个 obv 问题,我们深表歉意。我想创建一个模型,它代表一个响应,其中包括我的端点的嵌套对象。这是一个示例响应:

{
  "result": {
    "prop1": "blah blah",
    "prop2": {
      "subProp": {
        "subSubProp": "blah blah"
      }
    }
  }
}

我遇到的问题是表示模型内部的嵌套对象。理想情况下,我会做这样的事情:

@model()
export class MyResponseModel extends Model {
  @property({
    type: 'object'
  })
  result: {
    prop1: string,
    prop2: {
      subProp: {
        subSubProp: string
      }
    }
  }
}

然后在我的控制器中,我将其设置为响应类型:

@post('/my-endpoint', {
  responses: {
    ...,
    schema: {
      'x-ts-type': MyResponseModel,
    }
  }
})
async post(): Promise<MyResponseModel>{...}

到目前为止,我完成这项工作的唯一方法是为每个嵌套对象创建一个模型,即一个用于“结果”的模型,另一个用于“prop2”,另一个用于“subProp”,这感觉不是实现这个的正确方法?在 LB3 中,您似乎可以指定一个“属性”道具来定义也可以有子对象的子对象。

相同的 q 要求 LB3 但没有回答 LB4:带对象的环回模型

在谷歌组中询问没有答案:https ://groups.google.com/forum/?nomobile=true#!topic/loopbackjs/AKgZT6V-pCc

提前致谢!

4

1 回答 1

0

如何创建一个包含嵌套对象的模型,而不为每个对象类型的属性创建一个新模型?

相同的 q 要求 LB3 但没有回答 LB4:带对象的环回模型

您的 LB3 问题的答案中描述的解决方案应该适用于 LoopBack 4。

@model()
export class MyResponseModel extends Model {
  @property({
    type: {
      prop1: 'string',
      prop2: {
        type: {
          subSubProp: 'string'
        }
      }
    }
  })
  result: {
    prop1: string,
    prop2: {
      subProp: {
        subSubProp: string
      }
    }
  }
}

简写符号也应该起作用:

@model()
export class MyResponseModel extends Model {
  @property({
    prop1: 'string',
    prop2: {
      subSubProp: 'string'
    }
  })
  result: {
    prop1: string,
    prop2: {
      subProp: {
        subSubProp: string
      }
    }
  }
}
于 2019-09-02T12:36:17.140 回答